我想获取光标的当前记录,而不仅仅是ID,以便我可以操作上下文菜单.
@Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case DELETE_ID: AdapterView.AdapterContextMenuInfo info= (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); delete(info.id); return(true); } return(super.onOptionsItemSelected(item)); }
这很棒,因为它允许我获取所单击的上下文菜单的相应sqlite数据库ID,这将允许我编写一个函数来进行查找.但我当然可以重用当前的光标吗?
我试过这样做:
Cursor c = (Cursor) this.getListAdapter().getItem((int) info.id); String itemPriority = c.getInt(1); Log.v(TAG,"Current item:" + itemPriority);
但是光标线似乎只返回数据库的模式而不是我之后的记录.
请有人请说清楚.
编辑:感谢@azgolfer我找到了解决方案.我使用fillData()方法来填充适配器.通常,这是在没有变量的情况下声明的.我不得不用一个字段变量重新定义这个方法.在onContextItemSelected中使curstor适配器可见的代码的相关部分在这里:
private void fillData() { Cursor itemsCursor = mDbHelper.fetchAllItemsFilter(mListId,mStatusFilter); startManagingCursor(itemsCursor); mItemAdaptor = new ItemAdapter(this,itemsCursor); this.setListAdapter(mItemAdaptor); }
解决方法
您正在使用CursorAdapter显示列表项,对吧?然后,您已经可以通过调用CursorAdapter本身的getCursor()来访问游标.要从光标中检索正确的记录,只需要获取用户按下的项目的位置,然后将光标移动到该位置并检索数据.
首先,确定用户按下的位置:
AdapterView.AdapterContextMenuInfo info= (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); int itemPosition = info.position;
然后将光标移动到所需位置并检索记录:
Cursor cursor = (Your cursorAdapter).getCursor(); cursor.moveToPosition(itemPosition); String itemPriority = cursor.getInt(1); Log.v(TAG,"Current item:" + itemPriority);