在我的代码中有一个listview,我在其中执行删除listview项的操作。它工作但仍然显示在列表视图中。它是在第二个活动中。它只在进入第一个活动后消失然后返回。请给我我必须做的更改。
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();
}
答案 0 :(得分:1)
正如我所看到的,您现在正在从数据库中删除某个项目,但您并未将其从适配器中删除,这就是为什么已删除项目仍在ListView中的原因。当您转到另一个活动然后返回listView时,您将在适配器中加载更改的数据。
如果希望notifyDataSetChanged()产生效果,您也应该从适配器中删除一个项目。 。
您的代码应该是这样的:
eventsData1.delete( id);
adapter.deleteItem(id);
adapter.notifyDataSetChanged();
在Adapter类中添加delete()方法。 。
答案 1 :(得分:1)
您正在删除ID,即Long Type
eventsData1.delete( id);
你应该使用“位置”
eventsData1.delete(position);
adapter.notifyDataSetChanged();
答案 2 :(得分:0)
正如您所说,您的删除操作工作正常,但问题出在listView刷新。直到除非您要更改活动,否则它不会刷新您的列表。您必须要做的是,您必须在行末尾添加这段代码,其中删除操作在onItemClick中结束:
yourListView.setAdapter(yourAdapter);