当前位置:   article > 正文

RecyclerView获取某个item的VIewHolder、View为什么会为空_findviewholderforadapterposition 为空

findviewholderforadapterposition 为空

转载 :https://blog.csdn.net/z979451341/article/details/79099201

就一句话,这个Item是否可见,可见获取得到,不可见获取为空

平常我们使用RecyclerView的findViewHolderForAdapterPosition(int position)获取ViewHolder,使用LayoutManager的findViewByPosition(int position)获取itemView,通过这些函数之所以可能获取为空,因为这个position参数对应的item不可见,就算之前滑动显示过,如果调用函数的时候这个item不可见,那获取的值就是为空。


还有其他RecyclerView、LayoutManager获取某个item的VIewHolder、View的函数都是有这个特性。接下来我通过实例来证明,完整代码最后贴出

1.获取ViewHolder为空

我给Item设置点击事件,点击对应的Item,会把item的背景颜色设置为红色。这个时候你不管怎么点程序运行正常,不会报空指针错误

  1. adapter.setItemClick(new ItemClick() {
  2. @Override
  3. public void click(int position) {
  4. //获取ViewHolder
  5. MyAdapter.MyViewHodler viewHodler = (MyAdapter.MyViewHodler) recyc.findViewHolderForAdapterPosition(position);
  6. viewHodler.ll.setBackgroundColor(Color.RED);
  7. }
  8. });

如果我们在这个点击事件里,设置为把最后一个item的背景颜色设置为红色,还有就是我们看不到最后一个item,一点就崩溃,就算我们滑到最底部,然后滑到最上面,再点击还是会崩溃。

所以不是缓不缓存view,而是这个item可不可见

  1. MyAdapter.MyViewHodler viewHodler = (MyAdapter.MyViewHodler) recyc.findViewHolderForAdapterPosition(dataBeans.size() - 1);
  2. viewHodler.ll.setBackgroundColor(Color.RED);

如果我们使用的LayoutManager是LInearLayoutManager,我们可以通过函数知道第一个可见的item和最后一个可见的item

  1. int now = dataBeans.size() - 1;
  2. if (layoutManager.findFirstVisibleItemPosition() <= now && layoutManager.findLastVisibleItemPosition() >= now) {
  3. MyAdapter.MyViewHodler viewHodler = (MyAdapter.MyViewHodler) recyc.findViewHolderForAdapterPosition(dataBeans.size() - 1);
  4. viewHodler.ll.setBackgroundColor(Color.RED);
  5. }

2.获取View为空

点击item,获取这个item的view,设置背景颜色

  1. adapter.setItemClick(new ItemClick() {
  2. @Override
  3. public void click(int position) {
  4. View view = layoutManager.findViewByPosition(position);
  5. view.setBackgroundColor(Color.RED);
  6. }
  7. });
如果获取不可见的item,获取为空
  1. View view = layoutManager.findViewByPosition(dataBeans.size() - 1);
  2. view.setBackgroundColor(Color.RED);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/286656
推荐阅读
相关标签
  

闽ICP备14008679号