2016-04-14 3 views
0

У меня есть список с пользовательским адаптером и вы хотите установить цвет фона на основе содержимого элемента списка или переменной. Список состоит из текстового поля с датой и некоторой информацией.Изменить фон списка на основе содержимого/переменной

мне нужен цвет фона меняется, когда новая дата показывается ..

item1: 2. Март 2016 -> синий

item2: 2. Март 2016 -> синий

item3 : 3. марта 2016 -> серый

item4: 4. Март 2016 -> синий

...

Могу ли я установить переменную (isNewDate), которая может быть использована в спискеAdapter?

Мой список адаптер:

public class HistoryListViewAdapter extends ArrayAdapter<HistoryListItem> { 

     public HistoryListViewAdapter(Context context, List<HistoryListItem> items) { 
      super(context, R.layout.history_list_item, items); 
     } 

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

      if(convertView == null) { 
       // inflate the ListView item layout 
       LayoutInflater inflater = LayoutInflater.from(getContext()); 
       convertView = inflater.inflate(R.layout.history_list_item, parent, false); 
       //different color if new date 

       if (newdate == 0) //How to find if it is a "new date" 
        //togle color 

       convertView.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.colorPrimaryDark)); 

       // initialize the view holder 
       viewHolder = new ViewHolder(); 
       viewHolder.ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon); 
       viewHolder.tvTextfield = (TextView) convertView.findViewById(R.id.tvTextfield); 
       viewHolder.tvNote = (ImageView) convertView.findViewById(R.id.tvNote); 
       convertView.setTag(viewHolder); 
      } else { 
       // recycle the already inflated view 
       viewHolder = (ViewHolder) convertView.getTag(); 
      } 

      // update the item view 
      HistoryListItem item = getItem(position); 
      viewHolder.ivIcon.setImageDrawable(item.icon); 
      viewHolder.tvTextfield.setText(item.textfield); 
      viewHolder.tvNote.setImageDrawable(item.note); 

      return convertView; 
     } 

     private static class ViewHolder { 
      ImageView ivIcon; 
      TextView tvTextfield; 
      ImageView tvNote; 
     } 
    } 
+0

Что вы подразумеваете под isNewDate и какими критериями вы должны изменить цвет фона элементов списка? –

+0

isNewDate было предложением переменной, которая может быть истинна og false, если цвет фона должен быть таким же, как и последний элемент, или переключиться на второй цвет фона. Критерии: «если (элемент списка содержит информацию из другого дня, чем последний элемент) {переключить цвет фона}« Каждый элемент списка содержит информацию для определенного дня. Для каждого дня может быть ноль, один или несколько элементов. Данные списка хранятся в db. – EirikO

ответ

0

Вам нужно добавить varible на сегодняшний день магазин в HistoryListItem класса модели. Тогда ваш класс адаптера будет выглядеть следующим образом.

public class HistoryListViewAdapter extends ArrayAdapter<HistoryListItem> { 

//Varible to STORE current Date value 
String previousDate = null ; 

     public HistoryListViewAdapter(Context context, List<HistoryListItem> items) { 
      super(context, R.layout.history_list_item, items); 
     } 

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

      if(convertView == null) { 
       // inflate the ListView item layout 
       LayoutInflater inflater = LayoutInflater.from(getContext()); 
       convertView = inflater.inflate(R.layout.history_list_item, parent, false); 
       //different color if new date 

       //This is how you How to find if it is a "new date" 
       if(null== previousDate || !item.dateField.equalIgnorecase(previousDate)) 
{ 
//Store current date as previous date 
previousDate = item.dateField ; 

//TODO add togle color logic here 
} 


       convertView.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.colorPrimaryDark)); 

       // initialize the view holder 
       viewHolder = new ViewHolder(); 
       viewHolder.ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon); 
       viewHolder.tvTextfield = (TextView) convertView.findViewById(R.id.tvTextfield); 
       viewHolder.tvNote = (ImageView) convertView.findViewById(R.id.tvNote); 
       convertView.setTag(viewHolder); 
      } else { 
       // recycle the already inflated view 
       viewHolder = (ViewHolder) convertView.getTag(); 
      } 

      // update the item view 
      HistoryListItem item = getItem(position); 
      viewHolder.ivIcon.setImageDrawable(item.icon); 
      viewHolder.tvTextfield.setText(item.textfield); 
      viewHolder.tvNote.setImageDrawable(item.note); 

      return convertView; 
     } 

     private static class ViewHolder { 
      ImageView ivIcon; 
      TextView tvTextfield; 
      ImageView tvNote; 
     } 
    } 
+0

Спасибо. Просто пришлось переместить HistoryListItem item = getItem (позиция); перед использованием "item". – EirikO

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