当前位置: 首页 > 知识库问答 >
问题:

Kotlin-RecyclerView。ViewHolder子类-无法访问额外属性

孟鸿德
2023-03-14

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

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

现在,我正试图访问在它中声明的绑定属性,就像在回收站视图的子类中一样。适配器:

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
        }
    }

但编译器正在抱怨——未解析的引用: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) { }
}

如果我在这里错过了什么,有什么想法吗?请建议。

共有1个答案

吕承望
2023-03-14

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

 类似资料:
  • 短错误日志: 库的验证: 我阅读了所有相关的问题,例如: 无法访问ActivityCompatApi23类 尝试使用FragmentActivity时无法访问ActivityCompatApi23 错误:(59,8)错误:无法访问Android.support.v4.app.ActivityCompatApi23类文件 无法访问ActivityCompatApi23类文件 无法访问Activity

  • null 从我的类中调用这些代码的工作方式与我预期的一样。但是,我想在Kotlin子类之外调用其中的一个方法。 如果从不同的Kotlin类尝试,则会出现以下编译错误: 未解析得引用:completeWakefulIntent

  • 我正在尝试将我的Android项目切换到Kotlin。我有一个< code>EditText(一个< code>TextView的子类),我想以编程方式为它设置一个提示和文本。提示按预期工作。但是,对于文本,如果我尝试使用Kotlin setter语法,就会得到类型不匹配异常: 如果我们看一下声明,我们会发现从 继承的相同签名: 我的印象是 是 的快捷方式,但显然这种印象是错误的。 被视为普通方法

  • 问题内容: 我正在尝试从Objective-C 访问Swift类的属性。 在另一个视图控制器中,我尝试按以下方式进行访问: 而我得到 在类型’BusinessDetailViewController *’的对象上找不到属性’lat’ 为什么我不能访问此属性?我想念什么? 问题答案: 非Objective-C类型的可选值不会桥接到Objective-C中。也就是说,前三个属性下面 会 是在Objec

  • 我一直在尝试使用githubrowsersample对sunflower应用程序示例进行Restfulise,所以我一直在尝试进行一些复制和粘贴。然而,我完全搞不懂为什么会出现这个错误。此特定代码是完整的复制和粘贴。 我收到的错误是: 错误:DataBoundViewHolder(T)在DataBoundViewHolder中不是公共的;无法从T为类型变量的包外部访问:T扩展了DataBoundV