2012-07-26 54 views
6

我想获取游标的当前记录,而不仅仅是ID,以便我可以操作上下文菜单。如何从光标获取数据到ContextMenu

我看到这个例子here将告诉您如何获得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()方法来填充适配器。通常这是没有变量的声明。我不得不用字段变量重新定义这个方法。的代码,以使curstor适配器onContextItemSelected可见的相关部分是在这里:

private void fillData() { 
    Cursor itemsCursor = mDbHelper.fetchAllItemsFilter(mListId, mStatusFilter); 
    startManagingCursor(itemsCursor); 
    mItemAdaptor = new ItemAdapter(this, itemsCursor); 
    this.setListAdapter(mItemAdaptor);  
} 
+0

你通过重用是什么意思?并且'c.getInt(1)'得到那个游标行的索引1。所以只需从该游标行的其他索引中获取记录,如'c.getString(2)'。除非你正在尝试做别的事情。 – Andy 2012-07-26 20:10:07

+0

对不起,我猜工作重用应该是“使用”。但重点在于游标不返回数据,只是模式。 – 2012-07-26 20:23:12

+0

您可以打印显示'itemPriority'吗? – Andy 2012-07-26 23:03:00

回答

13

您正在使用一个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); 
+0

你的答案帮助我找到解决方案。问题是我不知道你可以声明适配器是一个字段变量。我已经更新了我的原始问题,以包括我在何处定义适配器。 – 2012-07-27 04:05:33

+0

非常有帮助的azgolfer,谢谢! – Soham 2013-01-11 15:26:20