2011-09-29 23 views
3

我有一個ListView通過ArrayAdapter填充。在適配器中,我設置視圖背景顏色依賴於條件。它的工作原理,但滾動其餘行時採用這種顏色。這是一些代碼:Android + ListView後臺在滾動時設置背景嗎?

class DateAdapter extends ArrayAdapter<DateVO> { 
    private ArrayList<DateVO> items; 
    public ViewGroup listViewItem; 

    //constructor 
    public DateAdapter(Context context, int textViewResourceId, ArrayList<DateVO> items) { 
     super(context, textViewResourceId, items); 
     this.items = items; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     try { 
      if (view == null) { 
       LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       convertView = vi.inflate(R.layout.row, null); 
      } 

      final DateVO dateItem = items.get(position); 

      if (dateItem != null) { 

       //is this my issue here? does position change while scrolling? 
       if(items.get(position).getField().equals("home")){ 
        view.setBackgroundResource(R.drawable.list_bg_home); 
       } 
       ... 
      } 

     }catch (Exception e) { 
      Log.i(ArrayAdapter.class.toString(), e.getMessage()); 
     } 

     return view; 
    } 
} 

回答

7

這是ListView的默認行爲。可以通過將cacheColorHint設置爲透明來覆蓋它。 就在你的XML文件中添加,

android:cacheColorHint="#00000000" 

欲瞭解更多詳情,你可以通過ListView Backgrounds文章。 下面是摘錄:

要解決這個問題,所有你需要做的是要麼禁用緩存的顏色提示優化,如果你使用非純色背景,或提示設置爲適當的純色值。您可以使用android:cacheColorHint屬性從代碼(請參閱setCacheColorHint(int))或最好從XML中執行此操作。要禁用優化,只需使用透明顏色#00000000。下面的屏幕截圖示出了具有機器人的列表:作爲convertView傳遞的視圖基本上是一個視圖,其是在列表視圖的一部分,但ISN」:=「#00000000」在XML佈局文件中設置

EDIT cacheColorHint不再可見(由於滾動)。所以它實際上是您創建的視圖,並且可能是您爲其設置了自定義背景的視圖。要解決這個問題,只需確保在條件不滿足的情況下重置背景。事情是這樣的:

if(condition_satisfied) { 
    //set custom background for view 
} 
else { 
    //set default background for view 
    convertView.setBackgroundResource(android.R.drawable.list_selector_background); 
} 

從本質上講,如果你的條件不成立,你將不得不撤消當你的條件滿足你在做什麼客戶化,因爲你可能已經收到了舊的自定義視圖convertView。 這應該可以解決你的問題。

+0

感謝您的帖子,但cacheColorHint不是我的問題,請參閱上文。 – worked

+0

天才!非常感謝你! – worked

+0

很高興幫助:) –