2012-07-26 63 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