如何监听并处理RecyclerView数据集变更的相关事件?
RecyclerView 数据变更监听实现方案
可以实现,Android SDK 为 RecyclerView.Adapter 提供了原生的AdapterDataObserver观察者类,专门用于监听适配器的数据变更事件,无需额外自定义回调,实现步骤如下:
核心实现步骤
自定义
AdapterDataObserver子类,重写你需要监听的事件回调方法
常用回调对应关系如下:onChanged():对应notifyDataSetChanged()全量数据更新事件onItemRangeChanged():对应局部条目内容更新事件onItemRangeInserted():对应条目新增事件onItemRangeRemoved():对应条目删除事件onItemRangeMoved():对应条目位置移动事件
代码示例(Java):
RecyclerView.AdapterDataObserver dataObserver = new RecyclerView.AdapterDataObserver() { @Override public void onChanged() { super.onChanged(); // 此处处理全量数据更新后的业务逻辑 } // 按需重写其余事件回调即可 };代码示例(Kotlin):
val dataObserver = object : RecyclerView.AdapterDataObserver() { override fun onChanged() { super.onChanged() // 此处处理全量数据更新后的业务逻辑 } }在持有适配器引用的模块中注册观察者
调用如下代码完成注册:yourAdapter.registerAdapterDataObserver(dataObserver);注册完成后,只要适配器调用任意notify系列方法,对应的回调就会自动触发。
及时注销观察者避免内存泄漏
在不需要监听的时机(比如页面销毁、模块卸载时)调用注销方法:yourAdapter.unregisterAdapterDataObserver(dataObserver);
注意事项
- 如果仅需要监听
notifyDataSetChanged触发的全量更新,只重写onChanged()方法即可,其余回调无需重写 - 不要在观察者的回调方法中再次调用适配器的notify系列方法,否则会触发循环调用导致应用崩溃
- 观察者和适配器绑定,只要是同一个适配器实例触发的notify事件,都可以被监听到,和触发notify的模块无关
内容的提问来源于stack exchange,提问作者Uknowledge_1
相关产品推荐
相关产品推荐

