0

我有一个带有删除按钮的列表视图项:按下此按钮时,该行被删除。我的适配器扩展了 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);
 }

这就是发生的事情,假设你有这个列表:

项目 1 项目 2 项目 3

我决定删除 item2,一切正常:

项目 1 项目 3

现在我删除 item3,这就是我得到的:

第 3 项

item1 被删除了!为什么?

编辑:好的,如果我首先添加一个新项目,它就会发生。无论如何,如果我添加项目,关闭应用程序,然后重新启动它就可以正常工作。我检查了一些 System.out,似乎当我添加新项目时,持有者类的 id 属性被搞砸了......

4

1 回答 1

0

已解决...问题是我将 getID 方法调用到持有人中,因此未注意到单元格更新:

if(holder == null){
    holder = new ViewHolder();
    holder.delB = (Button)view.findViewById(R.id.delB);
    ...
}
   holder.id = c.getInt(ID); //this solved
于 2013-05-11T19:48:37.547 回答