2015-09-14 4 views
1

У меня есть listView, и я хочу поместить выделение с градиентом цвета в качестве фона. Это выглядит следующим образом:Динамически изменяемый градиент цвета в адаптере

My list view

Как вы можете видеть, что это работает благодаря этому ответу:

How to change color of drawable shapes in android, но я не знаю, почему мой первый элемент взять прозрачный фон и его цвет берется для следующего пункта.

Вот мой адаптер код:

public class PromoAdapter extends ArrayAdapter { 

private Context context; 
private ArrayList<PromoObject> originalData = null; 
private GradientDrawable gradient; 
public PromoAdapter(Context context, ArrayList<PromoObject> listArray) { 
    super(context, R.layout.home_promo_item); 
    this.context = context; 
    this.originalData = listArray ; 
} 

public static class Row 
{ 
    public RelativeLayout layout; 
    public TextView labelPromo; 
} 

@Override 
public int getCount() { 
    return originalData.size(); 
} 

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

    View rowView = convertView; 
    // reuse views 
    if (rowView == null) { 
     LayoutInflater inflater = LayoutInflater.from(context); 
     rowView = inflater.inflate(R.layout.home_promo_item, null); 
     // configure view holder 
     Row viewHolder = new Row(); 

     viewHolder.labelPromo = (TextView) rowView.findViewById(R.id.label_promo); 

     rowView.setTag(viewHolder); 
    } 
    Row holder = (Row) rowView.getTag(); 
    PromoObject itm = originalData.get(position); 

    holder.labelPromo.setText(itm.getPromoValue()); 

    rowView.setBackgroundDrawable(gradient); 
    gradient = new GradientDrawable(
      GradientDrawable.Orientation.LEFT_RIGHT, 
      new int[] {0xFF616261,0xFF131313}); 
    gradient.setCornerRadius(15f); 

    return rowView; 
} 

}

+0

код или не бывает. – Simas

+0

Почтовый код адаптера. –

+0

готов код =) @Simas –

ответ

2

Изменения:

holder.labelPromo.setText(itm.getPromoValue()); 
if(position==0){ 

     gradient = new GradientDrawable(
      GradientDrawable.Orientation.LEFT_RIGHT, 
      new int[] {0xFF616261,0xFF131313}); 
     gradient.setCornerRadius(15f); 

     rowView.setBackgroundDrawable(gradient); 
}else{ 
     //default drawable or color 
     rowView.setBackgroundDrawable(default); 
} 
return rowView; 
0

Создайте отдельную вытяжку для каждого элемента:

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

    GradientDrawable gradient = new GradientDrawable(
     GradientDrawable.Orientation.LEFT_RIGHT, 
     new int[] {0xFF616261,0xFF131313}); 
    gradient.setCornerRadius(15f); 
    rowView.setBackgroundDrawable(gradient); 

    return rowView; 
} 
+0

Основная идея - сделать его динамически У меня есть объект для каждого элемента, но спасибо: D –

Смежные вопросы