2016-12-30 23 views
0

我有一個應該顯示一個大的ListView的Activity。現在我想設置單行的背景顏色。我試圖用getChildAt來完成,但是我只能標記那些可見的行。所以它不再工作,當列表比屏幕大。我找不到一個可行的選擇,所以如果你能給我一些建議,我會很高興。儘管滾動,更改ListView中單個視圖的Backgroundcolor

+2

列表視圖繪製的孩子,因爲他們來在屏幕上的表現..你爲什麼要設置這是不可見的孩子的背景顏色? – akash93

+0

好的,讓我解釋一下:我有一個帶有onclick監聽器的List。最後一項是特殊的,並改變了onclick監聽器的行爲。我想通過更改受影響項目的背景顏色來強調這種更改的行爲。使用getChildAt我只能改變那些現在可見的行。當我再次向上滾動時,先前不可見的項目將不會着色。 – Vallout

回答

1

這可以從ListView的適配器中實現。在getView(...)方法中,檢查當前項目是否與單行標準匹配,如果是,則爲當前行設置特定背景顏色,否則設置默認顏色。

事情是這樣的:

public class MyCustomAdapter extends BaseAdapter{ 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // .... 
     convertView = inflater.inflate(R.layout.item_layout, null); 
     // ... 

     Item item = items.get(position); 
     if(item.isSingleLine()){ 
     convertView.setBackgroundColor(SINGLE_LINE_BG_COLOR); 
     }else{ 
     convertView.setBackgroundColor(DEFAULT_BG_COLOR); 
     } 
    } 

} 
+0

非常感謝!使用適配器很容易,我只是沒有想到這一點。它以某種方式感覺有點笨重,因爲當我使用onclicklistener時,我唯一的解決方法是再次設置適配器,但我認爲這很好。 – Vallout