将单元项删除到自定义适配器中的错误

时间:2013-05-10 10:07:54

标签: android

我有一个带有删除按钮的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属性搞砸了......

1 个答案:

答案 0 :(得分:0)

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

if(holder == null){
    holder = new ViewHolder();
    holder.delB = (Button)view.findViewById(R.id.delB);
    ...
}
   holder.id = c.getInt(ID); //this solved