【问题标题】:Recycler view off screen child view holder returning null回收站视图关闭屏幕子视图持有者返回 null
【发布时间】:2019-02-11 08:27:41
【问题描述】:

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

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

holdernull

【问题讨论】:

  • 它应该是null - 文档说:“这个方法只检查 RecyclerView 的孩子。如果给定位置的项目没有布局,它不会创建一个新的。”

标签: android android-recyclerview recyclerview-layout expandablerecyclerview


【解决方案1】:

应该为空,见documentation

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

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

【讨论】:

    【解决方案2】:

    如果你真的需要访问屏幕外的项目,你可以试试我的这个代码:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 1970-01-01
      • 2016-04-20
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多