NotifyItemRemoved 显示动画,但项目保留在里面。不会被删除
NotifyItemRemoved shows the animation but the item remains inside. Does not get removed
我有一个队列,我在其中滑动项目时添加项目。然后我浏览它,我想使用 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
仍在调整,但我想我发现了问题:
mItems.remove(obj.getPosition());
尽管 obj.getPosition 是一个整数。
mItems.remove(obj.getPosition())
会把它当作一个对象,所以它会尝试删除一个类似于 Integer 的对象。
通过转换为 int,现在它从该位置删除了对象:
mItems.remove((int)obj.getPosition());
我有一个队列,我在其中滑动项目时添加项目。然后我浏览它,我想使用 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
仍在调整,但我想我发现了问题:
mItems.remove(obj.getPosition());
尽管 obj.getPosition 是一个整数。
mItems.remove(obj.getPosition())
会把它当作一个对象,所以它会尝试删除一个类似于 Integer 的对象。
通过转换为 int,现在它从该位置删除了对象:
mItems.remove((int)obj.getPosition());