在 onBindViewHolder 中 findViewById 是不好的做法吗?

is it bad practice to findViewById in onBindViewHolder?

我正在 Android 中实现 recyclerView。这是我的适配器的 onBindViewHolder 方法:

// Replace the contents of a view (invoked by the layout manager)
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
    // - get element from your dataset at this position
    // - replace the contents of the view with that element
    val textView = holder.textView.findViewById(R.id.simple_text) as TextView
    textView.text = myDataset[position]
}

所以基本上 MyViewHolder class 有一个名为 textView 的视图字段(实际上是我的 res/layout 文件夹中的布局),我访问 TextView(它是布局中 textView 的子项) ) 使用 findViewById。这是不好的做法吗?我们应该避免在 onBindViewHolder 函数中调用 findViewById 吗?

谢谢

这是完全有效的,而且不是一个坏习惯。尽管您可以通过在 ViewHolder class 实现中缓存子视图的本地引用来添加一些优化以加快访问速度,但这取决于您,并且取决于您的设计要求.

旁注: 我会将您的 ViewHolder 的 textView 字段重命名为更有意义的名称,例如 itemLayout 或其他东西,以使其更清楚,指的是实际布局而不是 TextView 小部件。如您所见,其他人已经有了不同的答案,他们没有完全阅读您的问题,并且相信您的 textView 字段指的是 ViewHolder 的 itemView.

您的 onBindViewHolder 已经包含 holder 变量,该变量包含来自您的 onCreateViewHolder 的引用。所以,不用再用findViewById了。官方文档没有这样做,可以查看here.