我遇到了奇怪的问题。我已经制作了一个ListView,用适配器填充它,一切正常,直到我想要删除任何项目。按下确认按钮后,视图确实删除了,但其中的文字在下一个视图中的文本上没有变化。 例如,我在ListView中有这样的项目:
当我按删除项目2时,项目3消失,但位置2的视图中的文本不会改变。我知道项目2已删除,因为我使用数据库存储数据,在应用程序重启后,所有内容都按预期显示。我认为问题在于View Holder重用了视图,但我无法弄清楚如何在第二个视图中更改文本。 这里的代码不起作用(至少我认为这个问题在这里)
confirmDeleteButton.setOnClickListener(new View.OnClickListener() {//this button is in dialog
@Override
public void onClick(View v) {
DBController.init(context).delete("main", "id=" + item.get(position).getId(), null);//deleting item from database
remove(getItem(position)); //removing view from adapter
notifyDataSetChanged(); //notifying adapter
dialog.dismiss(); //closing dialog
}
});
只需使用RecyclerView而不是ListView。
答案 0 :(得分:0)
首先,您必须从adapter.remove(adapter.getItem(position));
然后拨打notifyDataSetChanged()
答案 1 :(得分:0)
请勿使用get位置删除数据,首先使用setid()确认getview适配器类中使用的confirmDeleteButton.setid(position)
等按钮。
然后根据getid()
删除ID,如:
DBController.init(context).delete("main", "id=" + item.get(v.getid()).getId(), null);//deleting item from database
remove(v.getid()); //removing view from adapter
答案 2 :(得分:0)
如果你使用的话会更好:
adapter.notifyItemRangeRemoved(int positionStart, int itemCount)
adapter.notifyItemRemoved(int position)
更多信息:https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html