【发布时间】:2016-10-08 17:56:31
【问题描述】:
这个新的 ViewHolder 应该用一个可以表示给定类型的项目的新视图来构造。您可以手动创建新视图,也可以从 XML 布局文件中扩展它。
但它继续说:
新的 ViewHolder 将用于使用 onBindViewHolder(ViewHolder, int, List) 显示适配器的项目。由于它将被重复用于显示数据集中的不同项目,因此最好缓存对 View 的子视图的引用,以避免不必要的 findViewById(int) 调用。
我可以举个例子吗?通过缓存对视图的子视图的引用而不是调用 findViewbyId。我的意思是在 viewholders 构造函数中我已经在调用 findviewbyId。像这样:
public class MyViewHolder extends RecyclerView.ViewHolder{
public TextView review;
public ImageView iv;
public MyViewHolder(View view) {
super(view);
review = (TextView) view.findViewById(R.id.gridview_text);
iv = (ImageView) view.findViewById(R.id.gridview_image);
}
}
这不正确吗?这些怎么缓存?
【问题讨论】:
-
它被缓存了,因为单个视图“模板”用于数据集中将填充您的 RecyclerView 的所有项目,因此它们只需要启动一次。你所拥有的是正确的 - 确保任何
onClick侦听器要么在你的持有者的构造函数中,要么通过接口处理,永远不要在onBindViewHolder()方法中。 -
每次实例化 viewHolder 时,都会根据我的示例调用 findViewById。不是为列表中创建的每个单元格调用 MyViewHolder 的构造函数吗?如果每个列表项都调用它,那么它如何称为缓存。
标签: android android-recyclerview