2011-06-16 88 views
0

我有一個自定義列表視圖,我正在使用自定義listadapter來顯示該列表。在我的自定義listadapter中,我試圖根據對象內的值動態設置每個項目的顏色。然而,無論何時我嘗試這樣做,項目都會變淡,而不是獲取它們設置的顏色。我在項目中應用了一些樣式,但是當我刪除它們的效果時,它仍然不起作用。這是我的代碼來改變每個項目的背景色:爲什麼我無法動態設置自定義Listview項目的背景?

private class stationAdapter extends ArrayAdapter<Station>{ 
    private ArrayList<Station> stations; 

    public stationAdapter(Context context, int textViewResourceId, ArrayList<Station> stations) { 
     super(context, textViewResourceId, stations); 
     this.stations = stations; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.row, null); 
     } 
     Station temp = stations.get(position); 
     if (temp != null) { 
      TextView stationName = (TextView) v.findViewById(R.id.stationname); 
      TextView serviced = (TextView) v.findViewById(R.id.inservice); 

      try{ 
       if(temp.getLine().equals("red")){ 
        v.setBackgroundColor(R.color.red); 

       } 
       else{ 
        v.setBackgroundColor(R.color.green); 
       } 
      }catch(Exception e){ 
       Log.d(TAG, "Null pointer"); 
      } 
      if (stationName != null) { 
       stationName.setText("Station: "+temp.getName());       } 
      if(serviced != null){ 
       serviced.setText("In Service: "+ temp.getInServive()); 
      } 
     } 
     return v; 
    } 

} 

如果有人能指出我在做什麼錯了,我真的很感激它。

回答

2

就像Darko提到的,你試圖設置一種顏色,但是使用資源ID來代替。隨着中說,使用列表項的背景純色是一大禁忌,你一定要使用一個選擇:在您的繪圖資源文件夾

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="false" android:state_pressed="false" android:state_selected="false" 
     android:state_checked="false" android:state_enabled="true" android:state_checkable="false" 
     android:drawable="@color/red" /> 
</selector> 

將在一個list_red_background.xml和使用setBackgroundResource()代替。

+0

那麼使用這個drawable來設置顏色,這也將解決我的新突出問題?謝謝 – Hugs 2011-06-16 14:50:20

+0

是的,這會解決它。這個選擇器說的是:只對默認狀態(未按下,未選中等)應用紅色,對於其他任何情況,使用默認顏色/可繪製。 – dmon 2011-06-16 14:51:01

3

你不能使用setBackgroundColor,然後引用的資源。如果你想使用setBackgroundColor(),您需要使用Color類,如:如果你想設置一個資源

setBackgroundColor(Color.BLACK); 

相反(R.drawable,R.color等......),你需要做的像

v.setBackgroundResource(R.color.black); 

編輯:

緩存顏色提示是,如果項目開始變得灰暗,而滾動列表中所需要的。如果要將自定義背景添加到項目和列表,則需要將其設置爲透明顏色。

+0

完美謝謝:) – Hugs 2011-06-16 14:31:38

+0

將它標記爲已回答,然後請讓人們知道它已解決。 – DArkO 2011-06-16 14:33:26

+0

還有一個問題,如果你不介意。我有一個drawable,每當一個項目的重點項目突出顯示將是藍色的。但沒有什麼突出顯示了。我這樣做的方式是在我的row.xml類中,並做了。現在還有另一種方法可以做到這一點嗎?謝謝 – Hugs 2011-06-16 14:37:52