2010-08-16 51 views
9

我有一個擴展ListView的活動。我將查詢的結果填充到sqlite數據庫中。列表元素由start_time,end_time,client_name和status組成。這些是我需要爲每個列表項顯示的4位信息。將隱藏值分配給列表視圖項

我的問題是:我有可能將隱藏的元素分配給此ListView項目嗎?

例如,我想爲該ListView項目存儲數據庫行的_id字段,以便當我單擊它時,可以基於該數據庫行的數據啓動新的活動。

編輯

我用它來從我的光標填滿我的列表的代碼:

String[] columns = new String[] {VisitsAdapter.KEY_CLIENT_FULL_NAME, VisitsAdapter.KEY_STATUS,VisitsAdapter.KEY_CLIENT_START_TIME, VisitsAdapter.KEY_CLIENT_END_TIME}; 

// the XML defined views which the data will be bound to 
int[] to = new int[] { R.id.name_entry,R.id.number_entry,R.id.start_time_display,R.id.end_time_display }; 

SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(HomeScreen.this, R.layout.list_element, cur, columns, to); 

哪裏R.layout.list_item是我的列表項的XML。我來自一個PHP/HTML背景,所以我通常會在這裏做一個隱藏的字段來保存我的_id值,然後我可以訪問一旦列表項被點擊。我可以在android中做類似的事嗎?我可以在我的xml佈局中放置一個隱藏的_id字段嗎?

回答

19

你應該嘗試從Web開發的一點點心中放鬆自己。沒有必要在視圖的隱藏字段中存儲這樣的東西。這會混淆你的數據和你的用戶界面,並造成很多混亂和不必要的視圖對象。

如果您使用sqlite數據庫來存儲您的值,您應該使用CursorAdapter管理您的列表項。 CursorAdapter存儲從數據庫獲得的結果,並管理數據如何顯示給用戶。如果您在ListView上註冊了onItemClickListener,監聽器將收到適配器以及在適配器中單元被單擊的數據項的位置。現在您可以使用getItem來檢索指向用於創建listitem的數據庫結果的遊標。現在,您可以從數據庫結果中獲取未向用戶顯示的id或所有其他值,並將其附加到開始下一個活動的意圖。

+0

當你說我應該使用CursorAdapter時,你的意思是否與我的示例代碼中的SimpleCursorAdapter相反? – 2010-08-16 11:58:31

+2

感謝您的回覆。在搜索了列表項監聽器的文檔後,我發現onListItemClick會自動傳遞遊標結果的rowID。 (數據庫中的_id列)。我正在討論這一切都是錯誤的(正如你指出的那樣),因爲我認爲我必須手動將它添加到列表項中,我沒有意識到android會自動處理這個問題。 謝謝,接受答案。 – 2010-08-16 12:18:09

+0

+1對於很好的解釋......但在SimpleAdapter的情況下,我可以如何實現相同? – hemu 2012-10-18 14:44:57

1

你應該考慮創建一個java對象來收集所有這些信息。例如,你可以建立一個像「列表項」一類,並且每個項目將有5個屬性:
START_TIME
END_TIME
CLIENT_NAME
狀態 ID (如果你需要更多)

,然後你有2個選項,您可以序列化對象以將整個對象放入數據庫中,或者保留已有的結構(我想),並且數據庫的每一行都將變爲ListItem對象。然後,當你查詢你的數據庫時,你把它們放在一個ArrayList中,然後擴展ArrayAdapter來創建你自己的適配器。最後,在getView方法中,您需要調用myListItem.getEnd_Time以及所有需要顯示數據的方法,並且不要使用getId,在需要該對象時可以直接從適配器使用該方法。

+0

對不起sephy,林很新的Android和我真的不跟着你的答案,我已經貼出相關代碼顯示在那裏我可是從 – 2010-08-16 11:16:13

+0

未來當人們花時間向你解釋一些東西,你只是給他們投票時,這種處理答案的方式是什麼。我無法相信。 – Sephy 2010-08-16 12:16:51

+0

嗨,Sephy,我應該指出,不是我降級你的答案。我感謝您的回覆以及您花時間查看我的問題。我不能說因爲我不知道誰降級了它。 Kuroutadori的答案也是如此。 – 2010-08-16 12:20:16

0

如果您需要非顯示比其他_id分貝的cols,在你的ListView的onItemClick(...) 您只要致電:

mAdapter.getCursor(); 

然後你就可以得到選擇列表中的任何非顯示的cols項目/行。

正如雅努什提到的,如果你只需要_id,只要致電:

mAdapter.getItemId();