我在recyclerView
中有20个子视图,启动时只有5个可见。
如果我尝试访问屏幕外子视图持有人,则返回null
。如何解决这个问题?
RecyclerView.ViewHolder holder = recyclerView.findViewHolderForAdapterPosition(i);
holder
是null
。
答案 0 :(得分:1)
它应该为空,请参阅documentation
回收(视图):以前用于显示特定数据的视图 适配器位置可以放置在高速缓存中,以便以后重新使用以显示 稍后再次使用相同类型的数据。这可以大大改善 通过跳过初始布局的膨胀或施工来提高性能。
因此,您可以看到,不会生成不在屏幕上的视图,因此 方法 recyclerView.findViewHolderForAdapterPosition(i); 将返回null。
答案 1 :(得分:0)
如果您确实需要在屏幕外访问该项目,可以尝试以下代码:
for(int i = 0; i<Objects.requireNonNull(recyclerView.getAdapter()).getItemCount(); i++) {
if (recyclerView.findViewHolderForLayoutPosition(i) != null) {
View childView = Objects.requireNonNull(recyclerView.findViewHolderForLayoutPosition(i)).itemView;
ImageView childCheckThumb = childView.findViewById(R.id.thumb_check);
TextView namePlateView = childView.findViewById(R.id.name_plate_text_view);
childCheckThumb.setVisibility(thumb);
}
}
以我为例,我正在访问所有不在屏幕上的列表,希望这可以解决您的问题