No animation on item removal on RecyclerView

后端 未结 8 1113
故里飘歌
故里飘歌 2020-12-23 18:47

I am using RecyclerView for the first time. Everything is working fine except that there is no animation on item removal even though the animation on item addit

8条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-23 19:32

    Late but might be helpful to someone, who want {search items with animation}

    Use below code In your activity or fragment where

    yourAdapter.animateTo(filteredModelList);
    

    Use below code in your RecyclerAdapter class

    public void animateTo(List models) {
            applyAndAnimateRemovals(models);
            applyAndAnimateAdditions(models);
            applyAndAnimateMovedItems(models);
        }
    
        private void applyAndAnimateRemovals(List newModels) {
            for (int i = items.size() - 1; i >= 0; i--) {
                final CommonModel model = items.get(i);
                if (!newModels.contains(model)) {
                    removeItem(i);
                }
            }
        }
    
        private void applyAndAnimateAdditions(List newModels) {
            for (int i = 0, count = newModels.size(); i < count; i++) {
                final CommonModel model = newModels.get(i);
                if (!items.contains(model)) {
                    addItem(i, model);
                }
            }
        }
    
        private void applyAndAnimateMovedItems(List newModels) {
            for (int toPosition = newModels.size() - 1; toPosition >= 0; toPosition--) {
                final CommonModel model = newModels.get(toPosition);
                final int fromPosition = items.indexOf(model);
                if (fromPosition >= 0 && fromPosition != toPosition) {
                    moveItem(fromPosition, toPosition);
                }
            }
        }
    
        private CommonModel removeItem(int position) {
            final CommonModel model = items.remove(position);
            notifyItemRemoved(position);
            return model;
        }
    
        private void addItem(int position, CommonModel model) {
            items.add(position, model);
            notifyItemInserted(position);
        }
    
        private void moveItem(int fromPosition, int toPosition) {
            final CommonModel model = items.remove(fromPosition);
            items.add(toPosition, model);
            notifyItemMoved(fromPosition, toPosition);
        }
    

提交回复
热议问题