項目用到,實現一個recyclerView列表的item翻轉動效,翻轉的同時會將指定item置頂。
(比如交換AB位置,A在0位置,指定的item B 在 i 位置)
原始使用的是插入B到0位置,然后移除B
dataList.add(0, bean);
mAdapter.notifyItemInserted(0);
mAdapter.notifyItemRangeChanged(0, dataList.size());
dataList.remove(bean);
mAdapter.notifyItemRemoved(i + 1);
if (i + 1 < dataList.size()) {
mAdapter.notifyItemRangeChanged(i + 1, dataList.size() - (i + 1));
}
這樣插入移除更新引起的問題即是recyclerView的item錯亂和重復,並且不是在recyclerView上的數據混亂,是在原recyclerView布局地方的上層或下層出現一塊重復了的item。emm,具體原因我也不清楚,反正能確定的就是這里remove+add引起的,然后修改成了直接將AB交換位置,解決問題。
dataList.set(i, dataList.get(0)); mAdapter.notifyItemChanged(i); if (i < dataList.size()) { mAdapter.notifyItemRangeChanged(i, dataList.size() - (i)); } dataList.set(0, bean); mAdapter.notifyItemChanged(0); mAdapter.notifyItemRangeChanged(0, dataList.size());