NotifyItemRemoved显示动画,但项目仍在内部。不会被删除

时间:2018-01-31 11:34:57

标签: android animation android-recyclerview adapter recycler-adapter

我有一个队列,在我刷卡时添加项目。然后我通过它,我想用动画,使用notifyItemRemoved删除我刷过的项目。 这是我的代码:

   public void goThroughRemovalQueue() {
    Log.i("#tagTimelineTrip", "goThroughRemovalQueue handleResponseInTransactionTags goThroughRemovalQueue: " + ids.size());
    if (!removingTrip) {
        if (ids != null && ids.size() > 0) {
            removingTrip = true;
            boolean found = false;
            final RemovalAnimationQueueModel obj = ids.get(0);
            for (int i = 0; i < mItems.size(); i++) {
                if (obj.getId().equals(mItems.get(i).getId())) {
                    found = true;
                    obj.setPosition(i);
                    break;
                }
            }
            if (found) {
                Log.e("#tagTimelineTrip", "handleResponseInTransactionTags position: " + obj.getPosition() + " tabType: " + obj.getLastTab());
                mItems.remove(obj.getPosition());
                notifyItemRemoved(obj.getPosition());
                notifyItemRangeChanged(obj.getPosition(), mItems.size());
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        removingTrip = false;
                        goThroughRemovalQueue();
                    }
                }, delayRemovalAnimation);
            } else {
                removingTrip = false;
            }
            setIsTagging(obj.getViewHolder().swipeLayout, false, obj.getViewHolder().container);
            obj.getViewHolder().greenView.setVisibility(View.INVISIBLE);
            ids.remove(0);
        } else {
            removingTrip = false;
            back.onResponse(Constants.TIMELINE_CALLBACK_REFRESH);
        }
    } else new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            goThroughRemovalQueue();
        }
    }, delayRemovalAnimation);
}

现在我只为1个对象尝试它,所以我可以确保它对队列中的1个项目起作用。但该项目正在删除,带有动画,然后它会显示回来,为什么会发生这种情况?

视频: https://www.dropbox.com/s/9rxjeg5sdx7ed5a/video-1517397768.mp4?dl=0

1 个答案:

答案 0 :(得分:0)

还在调整它,但我想我发现了这个问题:

 mItems.remove(obj.getPosition());

即使obj.getPosition是一个整数。 mItems.remove(obj.getPosition())会将其作为Object,因此它会尝试删除类似于Integer的对象。 通过强制转换为int,现在它从该位置移除对象: mItems.remove((int)obj.getPosition());