2015-03-05 1 views
1

Я пытаюсь разработать класс адаптеров класса, из которого мне нравится наследовать свойство цвета строки для нечетных и четных строк. My Generic Adapter Class -Универсальный адаптер для альтернативного цвета строки?

public class SpecialAdapter<T> extends ArrayAdapter<T> { 
    private int[] colors = new int[] { 0x30FF0000, 0x300000FF }; 

    public SpecialAdapter(Context context, int resource, List<T> items) { 
     super(context, resource,items); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 
     int colorPos = position % colors.length; 
     view.setBackgroundColor(colors[colorPos]); 
     return view; 
    } 
} 

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

общественный класс MyArrayAdapter расширяет SpecialAdapter {..}

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

Это мой адаптер класс

public MyArrayAdapter(Activity context, List<MyObject> list) { 
     super(context, R.layout.mylayout, list); 
     this.context = context; 
     this.list = list; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = null; 
     if (convertView == null) { 
      LayoutInflater inflator = context.getLayoutInflater(); 
      view = inflator.inflate(R.layout.mylayout, null); 
      final ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.txtName = (TextView) view.findViewById(R.id.label);   
      view.setTag(viewHolder); 
     } else { 
      view = convertView; 
      ((ViewHolder) view.getTag()).txtName.setTag(list.get(position)); 
     } 
     ViewHolder holder = (ViewHolder) view.getTag(); 
     holder.txtName.setText("Position " + position); 
     return view; 
    } 
+0

if (position% 2 == 0) {set one color} else {set another one} –

+0

код выглядит хорошо для меня. Вы можете попробовать с полной альфой? FF вместо 30? – Blackbelt

+0

Я пробовал использовать полный Alpha .. но не повезло .. –

ответ

0

Я сделал некоторые настройки как includeMe предложил и его работу сейчас. Я могу передать свой макет как динамический.

public class SpecialAdapter<T> extends ArrayAdapter<T> { 
    private int[] colors = new int[] { 0x30FF0000, 0x300000FF }; 
    int resource; 
    Activity context; 
    List<T> items; 

    public SpecialAdapter(Activity context, int resource, List<T> items) { 
     super(context, resource, items); 
     this.resource = resource; 
     this.context = context; 
     this.items =items; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // View view = super.getView(position, convertView, parent); 
     View view = context.getLayoutInflater().inflate(resource, null); 
     int colorPos = position % colors.length; 
     view.setBackgroundColor(colors[colorPos]); 
     return view; 
    } 

} 

И добавил эту строку в мой класс getView.

view = super.getView(position, convertView, parent); 

, заменив эту строку.

view = context.getLayoutInflater().inflate(R.layout.mylayout, null); 

Теперь мне не нужно сохранять код изменения цвета в каждом классе адаптера. Superclass позаботится об этом.

1

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

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    View view = super.getView(position, convertView, parent); 
    if (position % 2 == 1) { 
     view.setBackgroundColor(Color.BLUE); // you can add any color here 
    } else { 
     view.setBackgroundColor(Color.CYAN); // don't like cyan? add another color. 
    } 

    return view; 
    } 
+0

Так что лучше сохранить цвет строки в классе адаптера. –

+0

Давайте оставим жизнь простой, сохраните ее в самом классе адаптера, если нет других осложнений. – includeMe

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