2011-02-24 83 views
3

我有一個ListView ListActivity由數據庫表填充。 ListView的每一行都是一個RelativeLayout,它具有三個按照該順序命名爲rowid,date和name的TextView。我可以使用ListView的.setSelection(int position)方法以編程方式選擇單個行。android:識別ListView中的單個項目?

下面是我想要做的:當我在界面上按下按鈕時,從當前選定的列表行中獲取rowid,並使用rowid執行db查詢。我無法弄清楚如何從列表中獲取rowid。 rowid可能與列表中的ID或位置不同,因爲它是數據庫中的rowid。

我懷疑這將需要使用適配器,但我一直在嘗試/搜索網絡一個星期,一直沒能弄清楚。感謝任何人都可以提供的幫助。

回答

3

您知道當前選定項目的列表位置,您在ListView外部有一個按鈕,該按鈕應觸發該項目的某個操作,而且您不僅僅製作ListView行(或每行內的某個子視圖)點擊。對?

您可以從列表的適配器中獲取信息。 getItem(int position)返回位置處列表項表示的對象,因此如果存儲在對象中,則可以直接檢索所需的信息。 getView(int position)返回行的視圖,允許您使用findViewById(int id)來檢索您的TextView。

如果您還沒有適配器,可以使用getAdapter()從ListView中獲取它。

// ListView myListView = the ListView in question 
// int selectedRow = the currently selected row in the ListView 
// Each row in the ListView is backed by an object of type MyCustomDataClass 

int dbRowId; 
Adapter adapter = myListView.getAdapter(); 

MyCustomDataClass data = (MyCustomDataClass) adapter.getItem(selectedRow); 
dbRowId = data.getDatabaseRowId(); 
// OR 
dbRowId = data.rowId; 
// OR whatever method the object has for getting the ID. 

// OR 
View listViewRow = adapter.getView(selectedRow); 
TextView dbRowView = (TextView) listViewRow.findViewById(R.id.rowid); 
String dbRowAsString = dbRowView.getText().toString(); 
dbRowId = Integer.parseInt(dbRowAsString); 

您可能還會考慮用戶點擊ListView行,而不是選擇行然後再按下另一個按鈕是否更自然。裏諾的答案可能會更好。

+0

這正是我一直在尋找。非常感謝!多麼偉大的社區。 – spryan 2011-02-24 23:32:27

1

我結束了使用下面的代碼的最後一個方法。

int dbRowId; 
Adapter adapter = myListView.getAdapter(); 

View listViewRow = adapter.getView(selectedRow); 
TextView dbRowView = (TextView) listViewRow.findViewById(R.id.rowid, null, null); 
String dbRowAsString = dbRowView.getText().toString(); 
dbRowId = Integer.parseInt(dbRowAsString); 

我不得不做出的唯一改變是增加NULL,NULL的參數.findViewByID

TextView dbRowView = (TextView) listViewRow.findViewById(R.id.rowid, null, null); 
相關問題