0

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

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

holdernull

4

2 回答 2

1

它应该为空,请参阅文档

回收(视图):以前用于显示特定适配器位置的数据的视图可能会被放置在缓存中,以供以后重用,以便以后再次显示相同类型的数据。这可以通过跳过初始布局膨胀或构造来显着提高性能。

因此,您可以看到,不会生成不在屏幕上的视图,因此方法recyclerView.findViewHolderForAdapterPosition(i); 将返回空值。

于 2019-02-11T08:49:11.887 回答
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);
        }
    }

就我而言,我正在访问以检查所有屏幕外列表,希望这可以解决您的问题

于 2019-02-11T08:46:28.297 回答