关于RecyclerView的notifyDatasetChanged和notifyItemxxx方法的一个注意点
2017-05-27 10:26
573 查看
场景是这样的:
RecyclerView的item中有一个button,点击button后会删除这个item,如果我调用
原因分析
经过分析源码,发现notifyDataSetChanged最终会使adapter的数据重新绑定,即会重新调用adapter里的onBindViewHolder方法,从而使item的position得到了更新;但是我们的notifyItemxxx方法呢?他并不会更新item的position,所以导致了上面描述的问题。
解决办法
用相面两行代码替代:
第二行代码的作用:通知这个item后面的item,你们的position要改变了,如是而已。
RecyclerView的item中有一个button,点击button后会删除这个item,如果我调用
mAdapter.notifyDataSetChanged();,数据正常显示,但如果我调用
mAdapter.notifyItemRemoved(position);,就会出现删除异常的各种问题,比如数组越界的问题等等。
原因分析
经过分析源码,发现notifyDataSetChanged最终会使adapter的数据重新绑定,即会重新调用adapter里的onBindViewHolder方法,从而使item的position得到了更新;但是我们的notifyItemxxx方法呢?他并不会更新item的position,所以导致了上面描述的问题。
解决办法
用相面两行代码替代:
mAdapter.notifyItemRemoved(position); mAdapter.notifyItemRangeRemoved(position,mAdapter.getItemCount());
第二行代码的作用:通知这个item后面的item,你们的position要改变了,如是而已。
相关文章推荐
- RecyclerView的notifyItemRemoved()方法删除条目问题
- 关于RecyclerView的Adapter的notifyItemInserted()的一些分析
- RecyclerView关于notifyItemRemoved的那点小事
- RecyclerView.Adapter关于notifyItemInserted等数据错位问题
- RecyclerView关于notifyItemRemoved的那点小事!
- 《android编程权威指南》RecyclerView的notifyItemChanged()方法使用
- 有关RecyclerView.Adapter 的 notifyItemChanged(int position, @Nullable Object payload) 方法
- 关于RecyclerView notifyItemChanged() 刷新下标错误问题
- RecyclerView通过notifyItemChanged方法更新item数据避免闪烁
- RecyclerView实现Item点击事件方法二
- RecyclerView实现Item点击事件方法三/四
- Android在RecyclerView/ScrollView中嵌套一个GridView或者recyclerView时只显示一行的原因及解决方法
- RecyclerView notifyItem闪烁的问题
- 关于recyclerview的横向布局的宽度以及item的点击事件的添加
- android:一个listview多个item布局时,需注意重写getViewTypeCount()方法
- 关于RecyclerView 的Item 自适应问题
- RecyclerView notifyItemChanged 后 item 闪动
- RecyclerView notifyItem闪烁的问题
- 一个能一句话添加header和Footer,并且能滑动删除和交换Item的RecyclerView
- Android RecyclerView使用notifyItemRemoved()移除数据时数据错乱