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); }