繁体   English   中英

如何在适配器 class 中获取 `layoutInflator`?

[英]How to get `layoutInflator` in adapter class?

我有一个用例...

我想让layoutInflator为嵌套的 recyclerView 绑定不同的视图。 有什么最好的方法来获取layoutInflator吗?

我试图从onBindViewHolder获取它

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    holder. //something?
}

您不应该在onBindViewHolder中膨胀任何东西 - onCreateViewHolder是您设置显示列表项的ViewHolder object 的地方,包括膨胀其布局视图。 onBindViewHolder是您与这些视图交互的地方,以显示当前项目的适当数据。

那些创建的ViewHolder会被重用,因此无需为每个项目扩充视图,您只需创建少量ViewHolder ,它们会在您滚动列表时交换。 VHs 池的回收就是它被称为RecyclerView的原因。

通常,您会在每个ViewHolder中存储对膨胀视图的引用,如本例所示

/**
 * Provide a reference to the type of views that you are using
 * (custom ViewHolder)
 */
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
    val textView: TextView

    init {
        // Define click listener for the ViewHolder's View
        textView = view.findViewById(R.id.textView)
    }
}

这样,传递给ViewHolderonBindViewHolder就有一个您可以访问的textView字段,例如,设置其文本内容以显示当前项目的数据。 (如果您使用的是视图绑定,则可以改为存储对绑定 object 的引用,并通过holder.binding.textView等访问视图)

我不知道你在用嵌套的RecyclerView做什么,但原理是一样的——主 RV 中的每个ViewHolder都将包含另一个 RV,它有自己的适配器和数据集,在onCreateViewHolder中创建和初始化。 如果要更改其内容(因为要在主 RV 列表中显示特定项目),您可能需要在嵌套 RV 的适配器上添加一个setData function 以更改其数据集并刷新显示。 让适配器在需要时处理膨胀的东西,在onCreateViewHolder

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM