2013-09-20 3 views
4

Я создаю пользовательский адаптер для списка - я бы хотел, чтобы этот адаптер выдавал переменные цвета фона списка.Изменить цвет фона текущего элемента списка в адаптере getView метод

boolean alternate = false; 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

     if (alternate) 
     { 
      // set background colour of this item? 
     } 

     alternate = !alternate; 

     // lots of other stuff here 

     return convertView;  } 

Как бы установить фон элемента списка в контексте?

ответ

12

Alternate List item background

Это следующие шаги, чтобы сделать шоу. Step1.1) Используйте два переключателя для нечетного и даже постиона элемента списка

artists_list_backgroundcolor.xml

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

Шаг 1.2) artists_list_background_alternate.xml

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

Шаг2) colors.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <color name="survey_toplist_item">#EFEDEC</color> 
    <color name="survey_alternate_color">#EBE7E6</color> 
    <color name="grey">#ffffff</color> 
    <color name="itemselected">#EDEDED</color> 
    <color name="login_hover">#E5F5FA</color> 
    <color name="sign_out_color">#e84040</color> 

</resources> 

Шаг 3) В Arrayadapter:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     if (view == null) { 
      view = lInflater.inflate(R.layout.listitem, parent, false); 
     } 

     if (position % 2 == 0) { 
      view.setBackgroundResource(R.drawable.artists_list_backgroundcolor); 
     } else { 
      view.setBackgroundResource(R.drawable.artists_list_background_alternate); 
     } 

     ((TextView) view.findViewById(R.id.heading)).setText(data.get(position)); 

     return view; 
    } 

Для получения более подробной информации перейдите по belog ссылке

http://amitandroid.blogspot.in/2013/03/android-listview-with-alternate-list.html

+0

можно ли добавить дополнительный butons ?? – Aditya

3

Вы не идете в правильном направлении, как если бы взгляды были повторно использованы, вы можете получить неожиданные результаты в том, что некоторые переработанные виды будут иметь разные цвета, а другие нет.

Вместо вышеописанного установите фон в соответствии с положением. Что-то вроде:

if(position % 2 == 0) { 
    // set some color 
} else { 
    // set the other color 
} 
0

Пожалуйста, поправьте меня, если я ошибаюсь, но я делаю это так:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
if (convertView == null) { 
     convertView = ((LayoutInflater) this._ctx 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE)) 
       .inflate(this._resource, parent, false); 

    } 

    switch(position % 3){ 
     case 0: convertView.setBackgroun.... 
      break; 
     .... (case 1; case 2;) 

    } 

return convertView; 

} 
2

Вы можете использовать этот код:

if (position % 2 == 0) { 
      holder.image.setBackgroundResource(R.drawable.image1); 
     } else { 
      holder.image.setBackgroundResource(R.drawable.image2); 
     } 
0

Вы можете сделать в вашем адаптере

public View getView(int position, View convertView, ViewGroup parent) { 

     if (convertView == null) { 
      inflater = ((Activity) context).getLayoutInflater(); 
      convertView = inflater.inflate(resourceId, parent, false); 
     } 
     Person user = getItem(position); 

     if(user.isCharged) 
     convertView.setBackgroundColor(Color.BLUE); 
    } 

, которые будут применяться во всех ваших товарах

0
private int[] colors = new int[] { 0xffD3D3D3, 0xffA9A9A9 }; 

    inside getView refer the id 
    holder._linear_text_active_release_date = (LinearLayout) convertView.findViewById(R.id.relative_text_active_release_date); 

holder._linear_text_active_release_status = (LinearLayout) convertView.findViewById(R.id.linear_text_active_release_status); 
add these lines in the getView to set the colour for layout row 

holder._linear_text_active_release_status.setBackgroundColor(Color.LTGRA; 
      holder._linear_text_active_release_pass.setBackgroundColor(ContextCompat.getColor(context,R.color.amber)); 
Смежные вопросы