2011-06-22 103 views
3

如何通過按下一行ListView(onListItemClick)標記該行選擇(保持按下的顏色,這是默認的黃色)?片段上的ListView

我不是在HoneyComb,我使用android-support-v4.jar Android兼容jar。

我想在HoneyComb(http://www.youtube.com/watch?v=5swwUeZ0-ww)上給出像Gmail這樣的方面,您知道選擇了哪個項目,因爲它保持藍色。

我想我想要做的是一個叫做activated(在HoneyComb上)的新狀態,但是..我想在其他版本上使用兼容jar來做到這一點。

順便說一句,我使用的是SimpleCursorAdapter填充ListFragment

感謝。

回答

2

我在列表中的適配器類來實現這一點。我在列表中有兩種類型的行:一種是普通的未選定的行,另一種是選定的行。當用戶選擇一個列表項目時,您通知適配器將該項目設置爲「selected」,並調用.notifyDatasetChanged()。在適配器的.getView()中,您檢查當前項目是否被選中,並且膨脹該行的相應佈局。

這看起來可能更復雜,但它確實有效。通過這種方式,您始終可以向適配器請求選定的元素,而不必在活動中混淆實例變量來存儲此信息。我認爲這有點乾淨。

+0

好吧,我設法實現它。我在適配器上添加了一個選定的int,然後當充氣時如果index =選擇setBackground顏色XPTO,否則將背景設置爲透明。 :-) – neteinstein

+0

這是in-efficeint。刷新一個列表項目的背景,可以刷新整個可見列表。 – Taranfx

1

使用下面的代碼

list.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { 
     view.setBackgroundColor(Color.WHITE); 
    } 
}); 
+0

此代碼有問題,您可以選擇多個項目...按幾個不同的全部去白色.. – neteinstein

+0

你顯然必須添加代碼來改變顏色回到以前什麼時候是其他東西選定... – Geoff

+0

這意味着循環所有元素? – Taranfx