我有一个带有删除按钮的listview项目:按下此按钮时,该行将被删除。 我的适配器扩展了CursorAdapter,因为数据存储在sqllite数据库中。
删除代码进入自定义适配器:
public void bindView(View view, final Context context, final Cursor c) {
ViewHolder holder = (ViewHolder)view.getTag();
if(holder == null){
holder = new ViewHolder();
holder.id = c.getInt(ID);
holder.delB = (Button)view.findViewById(R.id.delB);
final int id = holder.id;
holder.delB.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
context.getContentResolver().delete(SeriesContentProvider.SERIES_CONTENT_URI,
DBHelper.COLUMN_ID+"=?", new String[]{String.valueOf(id)});
}
});
view.setTag(holder);
}
这就是所发生的事情,比如你有这个清单:
ITEM1 ITEM2 项目3
我决定删除item2,一切正常:
ITEM1 项目3
现在我删除了item3,这就是我得到的:
项目3
item1被删除了!为什么呢?
编辑: 好吧,如果我先添加一个新项目就会发生。无论如何,如果我添加项目,关闭应用程序,然后再次启动它可以正常工作。我检查了一些System.out,似乎当我添加新项目时,持有者类的id属性搞砸了......
答案 0 :(得分:0)
解决了...问题是我将getID方法调用到持有者中,因此没有注意到单元格更新:
if(holder == null){
holder = new ViewHolder();
holder.delB = (Button)view.findViewById(R.id.delB);
...
}
holder.id = c.getInt(ID); //this solved