0

在我的代码中有一个列表视图,我正在其中执行删除列表视图项的操作。它可以工作,但仍显示在列表视图中。它在第二个活动中。它只有在进入第一个活动后才会消失,然后返回。请给我我必须做的更改。

Getclicker.java

public void onItemClick(AdapterView<?> a, View v, int position, final long id) {
                    AlertDialog.Builder adb=new AlertDialog.Builder(Getclicker.this);
                    adb.setTitle("Delete?");
                    adb.setMessage("Are you sure you want to delete the event" + (position+1));
                     final int positionToRemove = position;
                    adb.setNegativeButton("Cancel", null);

                        adb.setPositiveButton("Ok", new AlertDialog.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                                eventsData1.delete( id);
                                adapter.notifyDataSetChanged();
                            }});
                        adb.show();
                    }

数据库中的删除方法

public void delete(long id) {
        SQLiteDatabase db = this.getReadableDatabase();

        db.delete(DATABASE_TABLE, KEY_ROWID + " = ?",
                new String[] { String.valueOf(id )});
        db.close();
    }
4

3 回答 3

1

如我所见,现在您正在从数据库中删除一个项目,但您没有从适配器中删除它,这就是为什么删除的项目仍在 ListView 中的原因。当您转到另一个活动然后返回到 listView 时,您会在适配器中加载更改的数据。

如果您希望 notifyDataSetChanged() 产生效果,您也应该从适配器中删除一个项目。. .

你的代码应该是这样的:

eventsData1.delete( id);
adapter.deleteItem(id);
adapter.notifyDataSetChanged();

在您的 Adapter 类中添加 delete() 方法。. .

于 2013-08-20T06:40:35.033 回答
1

您正在删除基于 id 即 Long Type

eventsData1.delete( id);

你应该使用“位置”

eventsData1.delete(position);
adapter.notifyDataSetChanged();
于 2013-08-20T06:42:54.590 回答
0

正如您提到的,您的删除操作工作正常,但问题在于 listView 刷新。直到除非您更改活动,否则它不会刷新您的列表。您真正需要做的是,您必须在 onItemClick 中删除操作结束的行的末尾添加这段代码:

 yourListView.setAdapter(yourAdapter);
于 2013-08-20T09:15:00.157 回答