1

獲取數據我有一個ListView(在Activity的,而不是ListActivity)利用自定義光標適配器從我的本地數據庫獲取一些數據並顯示他們的ListView內。不能從遊標適配器

lv.setOnItemClickListener(new OnItemClickListener() 
{ 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View view, int position, long id) 
     { 
      Log.i(tag, "position = " + position); 
     Log.i(tag, "id is : " + id)); 
     } 
}); 

假設我的數據庫列如下:

ID,姓名,出生日期,身高,性別,placeOfBirth,maritalStatus。

但是,我在我的listview(row.xml)中只顯示名字和姓氏。 但是,無論用戶何時點擊列表中的某一行,我也想檢索其餘的數據,例如,ID或所點擊行的性別。

問題是,我沒有顯示列表中的數據庫行的所有信息,但是,當用戶按下列表時,我需要檢索該列表的某些數據。我怎麼能這樣做?

下面的方法不起作用,因爲我不在ListActivity中,而只是Activity。

public void onListItemClick(ListView l, View v, int position, long id) 
{ 
super.onListItemClick(l, v, position, id); 

Cursor c = ((SimpleCursorAdapter)l.getAdapter()).getCursor(); 
c.moveToPosition(position); 
//get the data... 
} 
+1

我不完全理解你的問題的第一部分。關於第二部分:您不需要ListActivity。只需將您的Adapater存儲爲您的Activity類或Fragment的數據成員即可。 – tiguchi

+0

@NobuGames我更新了這個問題看看。 – tony9099

回答

4

OnItemClickListener中的參數arg0ListView。然而,你可以做

lv.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { 
      // This will get the cursor from the adapter, already moved to position 
      Cursor cursor = (Cursor) mCursorAdapter.getItem(position) 
      //get the data... 
     } 
}); 
+0

你在哪裏初始化mCursorAdapter? (它已經是全球性的,你認爲?) – tony9099

+0

這是你在'lv.setAdapter()' –

+0

中設置的適配器,它告訴我要進行如下投影:遊標cursor =(Cursor)mCursorAdapter.getItem(position); – tony9099

-1

在裏面你應該使用這樣的

view.setTag(data); // you can pass here your specific data for each item 

假設您的數據getView方法僅僅是一個整數,那麼你可以通過這種方式得到的onItemClick()這個值:

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    Integer data = (Integer) view.getTag(); 
    // your operation 
} 
+0

你的意思是,我爲我不想顯示的東西放置一個隱藏的textView,並通過您建議的方法獲取值?聽起來太多開銷。 – tony9099

+0

不,我正在談論使用setTag來識別列表中的項目。所以當你對某個物品執行點擊動作時,你可以得到這個物品的ID。然後,您可以使用該ID訪問數據庫中的數據 - 重要說明:在這種情況下,您不應使用回收項目,或者您需要使用新標籤更新每個回收視圖 – GVillani82

+0

這是不必要的數據重複。看到我的答案。 –