android - android listview删除动画是自动删除第二项
问题描述
我有一个带有自定义适配器的列表视图。每个项目都有一个删除图标,提示删除对话框片段。在删除项目时,我正在执行幻灯片动画和动画结束。该项目已从列表中删除,并且适配器会收到有关删除的通知,如下所示:
// 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
除了制造虚假并解决由此产生的其他问题外,我找不到一个好的解决方案。
解决方案
解决了!使用 stableids 适配器删除额外字段的原因是,当我覆盖时getItemId
,我正在返回适配器位置本身,我猜,在删除项目的动画期间,相同的位置 id 被另一个列表项占用也被删除。通过返回列表项唯一的不同 itemId,不会发生此错误。所以我改变了这个:
@Override
public long getItemId(int position) {
return position;
}
对此:
@Override
public long getItemId(int position) {
Item item = items(position);
return item.getId();
}
我要items
传递给. Item 是我的类,它包含每个项目的元素/视图,并且是我必须返回每个项目的整数的 getterarraylist
adapter
getId()
id
Item
推荐阅读
- sql - 使用表单中的信息填充 Access 表
- wordpress - Timber + Gutenberg ACF Blocks 不渲染前端
- ethereum - 如何检查 Truffle 支持的最新 Solidity 版本
- azure - Blob 存储 GZRS 复制的 DR 测试
- javascript - Puppeteer 写入某些选项卡的 pdf 的问题
- react-native - 如何使多边形交互反应原生?
- javascript - OOP Three.JS 不起作用,控制台中未调用某些元素
- c++ - 尝试将二叉树保存为向量会出现内存问题(C++)
- javascript - JS页面上的点击按钮-Python
- git - 为什么我不能使用 git pull 来自 github resprority 的 master 分支?