我有一个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中的条目没有变化,这与我预期的行为有所不同,即我调用的行将删除。
答案 0 :(得分:0)
当你说它不起作用时,什么不起作用?它不会删除条目吗?它不显示更新的列表吗?你怎么删除这行?你能分享更多代码吗?
通常,id通常是数据库的_id(如果使用标准约定)。您使用自己的内容提供商吗?您需要通知系统数据库已更改,以便可以重新获取 - 通常在您按照SDK中的ContentProvider示例(查看notifyChange)以及使用托管查询时执行此操作。
答案 1 :(得分:0)