我知道如何通過onitemclicklistener訪問列表視圖項目,但我該如何改變代碼中的背景顏色。如何引用列表視圖中的特定視圖
須藤代碼:
lv[0].setBackgroundResource(R.color.red); //change the background of the first listview item
是否有訪問列表視圖的每個視圖的方法嗎?
我知道如何通過onitemclicklistener訪問列表視圖項目,但我該如何改變代碼中的背景顏色。如何引用列表視圖中的特定視圖
須藤代碼:
lv[0].setBackgroundResource(R.color.red); //change the background of the first listview item
是否有訪問列表視圖的每個視圖的方法嗎?
@Matt:這並不是說它很弱,你只需要瞭解它的工作方式。在任何時候,你的ListView只包含可見的項目,所以你不能直接訪問和更改項目。當它們從視圖中滾動出來時,視圖將被回收,並由ListAdapter填充數據。在這個適配器中,您需要處理項目應該不同的情況。如果您在getView()
方法中創建了自己的自定義ListAdapter(例如ArrayAdapter,BaseAdapter),只需在其中添加一些邏輯來處理背景顏色應該更改的情況。
比方說,例如,你有一個整數列表,以及任何你想要的整數> = 50,以紅色顯示:
if(items.get(position) >= 50) {
myView.setBackgroundColor("#FF0000");
} else {
myView.setBackgroundColor("#000000");
}
(以確保處理其他案件是很重要的,因爲您可能會看到一個紅色物品的回收視圖,在這種情況下,您必須將其重置爲您需要的任何默認背景顏色。)
如果您從未構建過自定義適配器,則可以使用this excerpt from CommonsWare's book在創建自定義ListAdapter是一個很好的資源。
編輯:進一步想,根據您的評論:
在您的自定義您的ListActivity
@Override
protected void onListItemClick(ListView l, View v, int pos, long id) {
super.onListItemClick(l, v, pos, id);
((CustomAdapter)l.getAdapter()).setLastSelectedObject(items.get(pos));
}
ExpandableListAdapter
private Object lastSelectedObject;
public void setLastSelectedObject(Object obj) {
lastSelectedObject = obj;
}
public Object getLastSelectedObject() {
return lastSelectedObject;
}
實施onListItemClick(ListView l, View v, int pos, long id)
現在回到getView()
Object obj = getLastSelectedObject();
if(obj != null) {
//handle background switching for your View here
} else {
//reset background to default for recycled views
}
Android中的ListView類很弱。
你的問題的簡短答案是否定的,不容易。
有人在Google I/O上詢問了這個問題,android團隊的答案是使用垂直填充的LinearLayout並添加一堆子視圖(基本上賦予其與ListView相同的功能) 。
你可以做getChild(x)用於獲得任何的意見
看一看this example
int first = view.getFirstVisiblePosition();
int count = view.getChildCount();
for (int i=0; i<count; i++) {
TextView t = (TextView)view.getChildAt(i);
if (t.getTag() != null) {
t.setText(mStrings[first + i]);
t.setTag(null);
}
}
似乎類似於getChildAt是你正在尋找的方法。
我有一個自定義listadapter(它實際上是一個自定義'expandableListAdapter')我有一個'getChildView'接收'groupPosition','childPosition','convertView'和'parentView'。問題是我需要根據最後點擊的子視圖來更改背景。我可以用這種方法粘貼某種'onclicklistener'嗎?另外,如何保存點擊哪個視圖?謝謝。 – yellavon 2011-05-25 18:21:01
啊我明白了。我已經爲您添加了一些其他建議。基本上,向你的ListAdapter添加一個私有變量來跟蹤最後一個被點擊的項目(只需要替換你的項目類型是用於Object的)。然後,每當一個項目被點擊時,將其設置爲您最後選擇的項目。然後在你的'getView()'中,檢索這個對象,並根據它處理你的邏輯。 – kcoppock 2011-05-25 19:00:59