【发布时间】:2019-11-18 08:46:08
【问题描述】:
我有一个带有自定义适配器的列表视图。每个项目都有一个删除图标,提示删除对话框片段。在删除项目时,我正在执行幻灯片动画和动画结束。该项目已从列表中删除,并且适配器会收到有关删除的通知,如下所示:
// dialog fragment on clicking "delete"
positive.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final FoldingCell fView = (FoldingCell) thisItem.getParent().getParent();
// wait for fold to finish then delete item
fView.postDelayed(new Runnable() {
@Override
public void run() {
deleteCell(fView, pos);
}
}, 850);
我的适配器是FoldingCell 类型,所以我在删除之前将单元格折回,因此是postDelayed。 deleteCell 是下面的简单动画:
private void deleteCell(final View v, final int index) {
TranslateAnimation transanim = new TranslateAnimation(0, 800, 0, 0);
transanim.setDuration(700);
transanim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
items.remove(index);
// update array adapter
adapter.notifyDataSetChanged();
v.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
v.startAnimation(transanim);
}
一个重要的不是我也在使用stableIds,这可能会导致问题。动画删除发生后,适配器将删除两个项目,而不仅仅是单击的项目。当我在上面的代码中禁用动画时,只需编写
items.remove(index);
adapter.notifyDataSetChanged();
在删除时,即使使用stable ids(只是没有动画),删除也能完美运行,这是为什么呢?问题似乎是动画和stable ids 的组合,因为如果stableids 为假,则删除适用于动画。
除了将 stable ids 设为 false 并解决由此产生的其他问题外,我找不到一个好的解决方案。
【问题讨论】:
标签: android android-listview android-animation android-arrayadapter