【问题标题】:Kotlin - RecyclerView.ViewHolder subclass - unable to access an extra propertyKotlin - RecyclerView.ViewHolder 子类 - 无法访问额外的属性
【发布时间】:2022-03-12 02:27:34
【问题描述】:

我已经实现了 RecyclerView.ViewHolder 子类如下:

class PersonViewHolder(itemView: View, binding: ViewDataBinding) : RecyclerView.ViewHolder(itemView) { }

现在我正在尝试在 RecyclerView.Adapter 的子类中访问其中声明的绑定属性:

override fun onBindViewHolder(holder: PersonViewHolder?, position: Int) {
        val person = persons[position]

        if (holder != null) {
            holder.binding.setVariable(BR.person, person) // line with error
            holder.binding.executePendingBindings() // line with error
        }
    }

但是编译器在抱怨 - Unresolved reference: binding

这是完整的实现:

class PersonsAdapter(private var persons: Array<Person>) : RecyclerView.Adapter<PersonsAdapter.PersonViewHolder>() {
    override fun onBindViewHolder(holder: PersonViewHolder?, position: Int) {
        val person = persons[position]

        if (holder != null) {
            holder.binding.setVariable(BR.person, person)
            holder.binding.executePendingBindings()
        }
    }

    override fun getItemCount(): Int {
        return persons.size
    }

    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): PersonViewHolder {
        val itemView = LayoutInflater.from(parent!!.context).inflate(R.layout.list_item_person, parent, false)
        return PersonViewHolder(itemView, DataBindingUtil.bind(itemView))
    }

    class PersonViewHolder(itemView: View, binding: ViewDataBinding) : RecyclerView.ViewHolder(itemView) { }
}

如果我在这里遗漏了什么,有什么想法吗?请提出建议。

【问题讨论】:

标签: android-recyclerview kotlin


【解决方案1】:

binding: ViewDataBinding - 你只是定义了一个构造函数参数,它永远不会被保存为类的成员。使用varval 对其进行标记,以使其存储参数并供以后访问。

【讨论】:

  • 这是正确答案。您可以阅读更多关于如何使用构造函数 here 的内容,其中涵盖了本节末尾的用例。
【解决方案2】:

检查项目中的 build.gradle 文件(模块级别)

在顶部的 android 扩展插件中是否包含? 插入 { id 'kotlin-android-extensions' }

【讨论】:

    猜你喜欢
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2022-11-10
    • 2015-11-13
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    相关资源
    最近更新 更多