使用ListView的上下文菜单中的_id列从数据库中删除行

时间:2010-07-22 23:45:01

标签: android

我有一个listview,它由SimpleCursorAdapter填充,它将数据绑定到来自sqlite数据库的游标的视图。我希望有一个上下文菜单选项,以便在长按时删除列表项,因此我通过调用registerForContextMenu(historyListView)来注册ListView以获取上下文菜单。我一直试图通过获取OnCreateContextMenu中的行ID并将其存储为名为lastSelectedId的私有字段来删除数据库中的行,然后在OnContextItemSelected中选择删除上下文项通过针对_id检查lastSelectedId列来删除数据库中的行。

这不起作用。

所以 - (1.)是

给出的行
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
        lastSelectedId = info.id;

与数据库中的_id列相同吗?

和(2.)如果没有,我还能如何根据数据库中行的onContextItemSelected()删除_id中的项目?

编辑:很抱歉没有解释为什么这种方法不能更深入地工作:当我尝试删除行时没有任何反应:我在数据库上调用mDB.delete(DB_TABLENAME,"_id=" + lastSelectedId, null);然后我调用{我bookmarksListAdapter.notifyDataSetChanged();上的{1}}。然后我看到listview中的条目没有变化,这与我预期的行为有所不同,即我调用的行将删除。

2 个答案:

答案 0 :(得分:0)

当你说它不起作用时,什么不起作用?它不会删除条目吗?它不显示更新的列表吗?你怎么删除这行?你能分享更多代码吗?

通常,id通常是数据库的_id(如果使用标准约定)。您使用自己的内容提供商吗?您需要通知系统数据库已更改,以便可以重新获取 - 通常在您按照SDK中的ContentProvider示例(查看notifyChange)以及使用托管查询时执行此操作。

答案 1 :(得分:0)