您的位置:首页 > 其它

解决RecyclerView删除Item导致位置错乱的问题

2017-01-17 15:51 666 查看
RecyclerView的刷新分为内容变化和结构变化,结构变化比如remove和insert等并不会导致viewholder的更新,所以有时候我们使用

notifyItemRemoved(position);


或者使用

notifyItemInserted(position);


item的位置并没有发生改变,或者位置发生错乱,很是奇怪诡异,需要重新调用

notifyDataSetChanged();


才能刷新整个List每个Item的位置,但这样做会使得RecyclerView增加和删除的动画效果没有了。那么要既想没有Bug的插入删除,又想有动画怎么搞呢,只需要刷新删除位置以下的List的Item位置即可,那么幸亏RecyclerView有一个局部刷新的方法:

notifyItemRangeChanged(int positionStart, int itemCount)


怎么使用呢?

我们只需要在删除或插入时同时,刷新改变位置item下方的所有Item的位置:

插入动作:

notifyItemInserted(position);
if (position != mData.size()) {
otifyItemRangeChanged(position, mData.size() - position);
}


删除动作:

notifyItemRemoved(position);
if (position != mData.size()) {
otifyItemRangeChanged(position, mData.size() - position);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: