2016-01-19 35 views
0

我有一個列表視圖,其中有一些行在屏幕上。當我在列表的底部時,列表的第0位(即第一項)不在屏幕上。我需要改變第一行的背景顏色,但爲了獲得對視圖的引用,我必須使用getAdapter.getView(),並且當我設置背景顏色時,它不會改變。如何更改從getApadpter()getView返回的ListView的行值?

我先試着平滑滾動的立場,要求改變背景顏色,但仍然沒有運氣的方法:

if(position == 0) { 
    mailList.smoothScrollToPosition(0); 
    selectRow(0); 
} 

這是我改變背景顏色:

public void selectRow(int position){ 

    // Get the row 
    View row = getViewByPosition(position, mailList); 
    // Highlight background colour 
    row.setBackgroundColor(ContextCompat.getColor(activity, R.color.Pallette_Peach_CC)); 
    // For every other row apart from 'position' 
    // Check if read/unread and set background colour 
    View v; 
    for(int i = 0; i < mailList.getCount(); i++){ 
     if(i != position){ 
      v = getViewByPosition(i, mailList); 
      if(Consts.mailBox.get(i).isRead()){ 
       v.setBackgroundColor(ContextCompat.getColor(activity, R.color.Ivory_Transparent_55)); 
      }else{ 
       v.setBackgroundColor(ContextCompat.getColor(activity, R.color.Ivory_Transparent_77)); 
      } 
     } 
    } 
} 

,這是我選擇行:

// returns a specific row 
private View getViewByPosition(int pos, ListView listView) { 
    final int firstListItemPosition = listView.getFirstVisiblePosition(); 
    final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1; 

    if (pos < firstListItemPosition || pos > lastListItemPosition) { 
     return listView.getAdapter().getView(pos, null, listView); 
    } else { 
     final int childIndex = pos - firstListItemPosition; 
     return listView.getChildAt(childIndex); 
    } 
} 

它平滑滾動到後埔sition 0,背景不會像它應該那樣重新設置,但是當我移動到第1行時,背景會被設置。誰能幫我嗎?謝謝。

回答

1

您可以將public View getView(int position, View convertView, ViewGroup parent)方法的條件放入適配器中,用於更改特定行的顏色。

if(position==0){ 
 
//Do your customization here 
 
}

+0

那麼簡單。這解決了我的問題,非常感謝! – Highway62