代码之家  ›  专栏  ›  技术社区  ›  rosu alin

NotifyItemRemoved显示动画,但项目仍保留在内部。无法删除

  •  0
  • rosu alin  · 技术社区  · 7 年前

    我有一个队列,在其中我在刷卡时添加项目。然后我浏览了一遍,我想用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);
    }
    

    目前,我只对一个对象进行了尝试,因此我可以确保它对队列中的一个项目有效。但是该项目正在被删除,带有动画,然后它又出现了,为什么会发生这种情况?

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   rosu alin    7 年前

    仍在调整,但我想我发现了问题:

     mItems.remove(obj.getPosition());
    

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