您的位置:首页 > 其它

关于RecyclerView的notifyDatasetChanged和notifyItemxxx方法的一个注意点

2017-05-27 10:26 573 查看
场景是这样的:

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要改变了,如是而已。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: