2011-04-05 65 views
5

我有一個包含兩列category_idname的類別表。我創建了一個名爲CategoryDataHelper的數據幫助類。我有一個名爲getCategoryCursor()的方法,它從類別表中提取id和名字並返回遊標。使用該光標,我使用SimpleCursorAdapter來顯示類別列表。它工作正常。如何在onItemClick處理程序中獲取物品ID

public class Categories extends ListActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     categoryDataHelper = new CategoryDataHelper(getApplicationContext()); 
     Cursor categoryCursor = categoryDataHelper.getCategoryCursor(); 
     ListAdapter adapter = new SimpleCursorAdapter (
       this, 
       android.R.layout.simple_list_item_1, 
       categoryCursor,            
       new String[] { CategoryDataHelper.NAME },   
       new int[] {android.R.id.text1}); 

     // Bind to our new adapter. 
     setListAdapter(adapter); 

     list = getListView(); 
     list.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       // Here I want the category_id 
      } 
     }); 
    }  
} 

現在我想實現一個OnItemClickListener與所選類別的category_id發送意圖。我如何獲得onItemClick()方法中的ID?

+0

是不是ID參數類型長幫助你? – 2011-04-05 14:09:45

+0

要獲取所選項目的內容,請使用 Object o = lv.getItemAtPosition(position); 對象o可以進一步用於獲取項目。 – 2011-04-05 14:11:06

+0

setListAdapter是做什麼的,它爲什麼會出現在list = getListView()之前? – 2011-04-05 14:13:51

回答

17

您可能應該從適配器獲取光標。這樣,如果你的光標被替換,你仍然得到一個有效的光標。

Cursor cursor = ((SimpleCursorAdapter) adapterView).getCursor(); 
cursor.moveToPosition(position); 
long categoryId = cursor.getLong(cursor.getColumnIndex(CategoryDataHelper.ID)); 

或使用"category_id"或任何你列的名稱是到位的CategoryDataHelper.ID

+9

'adapterView'通常不是一個適配器。這是一個使用適配器的視圖,因此具有getAdapter()方法。所以,在你的例子中,你應該調用'adapterView.getAdapter()'來代替。 – 2013-01-30 15:00:58

+0

它適用於'SimpleAdapter'嗎? – Apurva 2015-02-08 16:52:49

1

如何在onItemclick:

categoryCursor.moveToPosition(position); 

,然後從返回的光標從你的幫手ID?

+0

怎麼可能...你可以給代碼示例 – 2011-04-05 14:19:29

2

謝謝扎克,我可以解決您的帖子...超棒! ... 我送參數從活動到另一個這樣:

Intent myIntent = new Intent(Clientes.this, Edc.class); 
Cursor cursor = (Cursor) adapter.getItem(position); 
myIntent.putExtra("CLIENTE_ID", cursor.getInt(cursor.getColumnIndex("_id"))); 
startActivity(myIntent); 

在其他活動(EDC)......我得到的參數,以便:

int _clienteId = getIntent().getIntExtra("CLIENTE_ID", 0); 
1

隨着SimpleCursorAdapteronItemClick函數傳遞所選項目的數據庫ID。所以,解決辦法很簡單:

long category_id = id 
相關問題