【问题标题】:Why should i exactly write that way in Kotlin?为什么我应该在 Kotlin 中这样写?
【发布时间】:2020-05-20 13:51:34
【问题描述】:

我是 Android 版 Kotlin 的初学者。我有一些愚蠢的问题我找不到答案。

第一个问题。例如我有这样的代码

class myAdapter(context: Context, val list: List<DataSource>)
: ArrayAdapter<DataSource>(context, 0, list){

如果我这样写(不带参数)

class myAdapter(context: Context, val list: List<DataSource>)
: ArrayAdapter<DataSource>(){

然后 intellij 给我这个错误:以下函数都不能用提供的参数调用。我为什么要向 ArrayAdapter 提供参数以及它们会受到什么影响?

第二个问题。例如,我有一个代码:

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {

    val lf: LayoutInflater = LayoutInflater.from(context)
    val row = lf.inflate(R.layout.custom_list_view, parent, false)

    val view_icon = row.findViewById<ImageView>(R.id.icon)
    val view_title = row.findViewById<TextView>(R.id.title)
    val view_subtitle = row.findViewById<TextView>(R.id.subtitle)

    val ds: DataSource = list[position]
    view_icon.setImageResource(R.drawable.ic_folder_black_24dp)
    view_title.text = ds.ds_title
    view_subtitle.text = ds.ds_subtitle

    return row
}

“行”变量是什么意思,我为什么要给它分配“膨胀”?怎么用文字解释?如果我不分配,那么 inflate 将不起作用。 这是什么意思:

list[position]

我在哪里可以读到它? Kotlin 让我崩溃了。

【问题讨论】:

标签: android kotlin


【解决方案1】:

我为什么要向 ArrayAdapter 提供参数以及它们会受到什么影响?

基本上,当您有像 class MyClass(xxx) : SuperClass(yyy) 这样的行时,这意味着您正在创建一个名为 MyClass 的新类,其构造函数接受 1 个参数 xxx 并扩展了 SuperClass - 您正在调用其中的带有参数yyy 的构造函数。

现在,将其放在示例的上下文中,您首先尝试使用 3 个参数调用ArrayAdapter 的构造函数——ContextintList——它们存在并且可以调用。但是ArrayAdapter 没有任何没有参数的构造函数,因此会出现编译错误。

至于第二个问题,您可以在 official documentationhere 上阅读更多信息,例如——我想你会在网上找到很多资料——但基本上“膨胀”的意思是“渲染 UI 元素”,所以row 是包含对您刚刚膨胀的行的引用的变量。

【讨论】:

    猜你喜欢
    • 2011-01-19
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多