首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

RecyclerView findViewHolderForLayoutPosition和findViewHolderForAdapterPosition返回null

RecyclerView是Android开发中常用的列表控件,用于展示大量数据。findViewHolderForLayoutPosition和findViewHolderForAdapterPosition是RecyclerView的两个方法,用于查找指定位置的ViewHolder。

findViewHolderForLayoutPosition方法根据布局位置来查找ViewHolder,而findViewHolderForAdapterPosition方法根据适配器位置来查找ViewHolder。它们的返回值是RecyclerView.ViewHolder对象,表示找到的ViewHolder,如果找不到则返回null。

可能返回null的原因有以下几种情况:

  1. 位置超出范围:如果指定的位置超出了RecyclerView的数据范围,即超过了适配器中数据项的数量,那么这两个方法都会返回null。
  2. ViewHolder未绑定:如果指定位置的ViewHolder尚未绑定到RecyclerView上,即还没有通过RecyclerView的适配器绑定数据,那么这两个方法也会返回null。在RecyclerView的数据更新后,ViewHolder会被动态创建和绑定,因此在数据更新之前调用这两个方法可能返回null。
  3. ViewHolder已回收:如果指定位置的ViewHolder已经被回收,即在RecyclerView的缓存池中,那么这两个方法也会返回null。RecyclerView会对不可见的ViewHolder进行回收和重用,以提高性能和内存利用率。

对于这个问题,可以通过以下方式来解决:

  1. 确保位置的有效性:在调用findViewHolderForLayoutPosition和findViewHolderForAdapterPosition之前,先判断位置是否有效,即是否在适配器数据范围内。
  2. 确保ViewHolder已绑定:在调用这两个方法之前,可以先通过RecyclerView的findViewHolderForLayoutPosition或findViewHolderForAdapterPosition方法来获取ViewHolder,如果返回null,则说明ViewHolder尚未绑定,可以通过RecyclerView的scrollToPosition或smoothScrollToPosition方法将指定位置滚动到可见范围内,然后再次调用这两个方法。
  3. 使用其他方法:如果以上方法仍然无法解决问题,可以尝试使用其他RecyclerView的方法来获取指定位置的ViewHolder,例如通过RecyclerView的getChildAt方法获取指定位置的子View,然后通过RecyclerView的getChildViewHolder方法获取对应的ViewHolder。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobile
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/tbaas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/tencent-metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

实现一个带有headerfooter功能的RecyclerView

RecyclerView是Android 5.0版本引入的一个新的组件,目的是在一些场景中取代之前ListViewGridView,实现性能更优的解决方案。...我们知道RecyclerView很灵活,灵活到很多功能需要我们自己实现,比如ListViewGridView中最常用的Item点击事件。...WrapRecyclerView设置的LayoutManager是GridLayoutManager时,为其设置SpanSizeLookup,并通过position判断如果是header或footer返回...注意:这里考虑到用户也需要自定义SpanSizeLookup,所以在设置前先获取一下,如果存在则在getSpanSize中返回正确的值保证显示效果。...通过上面的处理,headerfooter的功能基本完善了,如果遇到其他问题,可以参照上面两种情况进行处理。 下拉刷新 最后我们再为这个RecyclerView实现下拉刷新和加载更多功能。

1.6K20

关于RecyclerView你知道的不知道的都在这了(上)前言目录正文

最近打算花点精力来研究 RecyclerView 这个控件架构原理,对我来说,难度很大,我不清楚最后能不能彻底搞清楚,这个系列的博客会不会被太监,但我会尽我最大努力,并将这整个过程分享出来。...但是调用那两个查找全部可见的 item 方法,仍然会返回 0 4,因为它只去判断水平方向是否全部可见。...既然界面已经刷新了,那么数据源界面的呈现其实就是一致的了,所以 getLayoutPosition() 返回的值就跟 getAdapterPosition() 是一致的了。...getItemId() 返回在 adapter 中通过 getItemId(int position) 为该 item 生成的 id,没有在 adapter 重写那个方法的话,就返回 RecyclerView.NO_ID...: findViewHolderForAdapterPosition() findViewHolderForLayoutPosition() findViewHolderForItemId() findContainingViewHolder

3.1K60

Android RecyclerView浅析(分类型)

itemView); } } } 5.5在onCreateViewHolde中,创建一个ViewHolder(),一般为加载一个布局文件,注意此处inflateLayoutInflater...然后根据常量来创建对应的ViewHolder(加载自己对应的布局文件),然后在根据类型绑定自己的对应的数据;所以每一中类型都要对应自己的ViewHolder,进而实现分类型;一般还有实现其有参构造为了传递初始化相关数据...返回2不应该是2列返回1是1列吗?...(this,2);  大家看这个方法里的第二个参数,我们是不是指定了2列 而我们的头是不是返回了2然后显示了一行,没错,就是所占的列数。...今天给大家简单的介绍了一下RecyclerView的一般用法分类的用法,一般我们开发使用最多的也就是这两种了,希望对大家能有所帮助。 Thanks all.

1.1K20
领券