屏幕上的回收者视图子视图持有者返回null

时间:2019-02-11 08:27:42

标签: android android-recyclerview recycler-adapter recyclerview-layout expandablerecyclerview

我在recyclerView中有20个子视图,启动时只有5个可见。 如果我尝试访问屏幕外子视图持有人,则返回null。如何解决这个问题?

RecyclerView.ViewHolder holder = recyclerView.findViewHolderForAdapterPosition(i);

holdernull

2 个答案:

答案 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);
        }
    }

以我为例,我正在访问所有不在屏幕上的列表,希望这可以解决您的问题