Android 将单元格项删除到自定义适配器中时出现错误

Android 将单元格项删除到自定义适配器中时出现错误,android,Android,我有一个带有删除按钮的listview项目:当按下此按钮时,行被删除。 当数据存储到sqllite数据库中时,我的适配器扩展了CursorAdapter 删除代码已插入自定义适配器: public void bindView(View view, final Context context, final Cursor c) { ViewHolder holder = (ViewHolder)view.getTag(); if(holder == null){ h

我有一个带有删除按钮的listview项目:当按下此按钮时,行被删除。 当数据存储到sqllite数据库中时,我的适配器扩展了CursorAdapter

删除代码已插入自定义适配器:

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

我决定删除第2项,一切正常:

项目1 项目3

现在我删除了第3项,这是我得到的:

项目3

项目1被删除了!为什么?

编辑:
好的,如果我先添加一个新项目,它就会发生。无论如何,如果我添加了该项目,请关闭应用程序,然后再次启动它,它工作正常。我检查了一些System.out,似乎在添加新项时,holder类的id属性被弄乱了…

解决了…问题是我将getID方法调用到holder中,所以没有注意到单元格更新:

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

是否有可能是ContentProvider中存在缺陷?您是否尝试过删除硬编码值作为测试?不,内容提供商可以