2016-04-14 18 views
0

Ich habe eine Liste mit einem benutzerdefinierten Adapter und möchte die Hintergrundfarbe basierend auf dem Inhalt des Listenelements oder einer Variablen festlegen. Die Liste besteht aus einer Textansicht mit einem Datum und einigen Informationen.Listeneintrag ändern Hintergrund basierend auf Inhalt/Variable

ich die Hintergrundfarbe ändern müssen, wenn ein neues Datum angezeigt wird ..

item1: 2. März 2016 -> blau

item2: 2. März 2016 -> blau

item3 3. März 2016 -> grau

item4: 4. März 2016 -> blau

...

Kann ich eine Variable (isNewDate) festlegen, die im listAdapter verwendet werden kann?

Meine Liste 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

Was meinen Sie mit isNewDate und nach welchen Kriterien müssen Sie die Hintergrundfarbe von Listenelementen ändern? –

+0

isNewDate war ein Vorschlag für eine Variable, die wahr und falsch sein könnte, wenn die Hintergrundfarbe mit der des letzten Elements übereinstimmen sollte, oder mit der zweiten Hintergrundfarbe wechseln. Das Kriterium lautet "if (das Listenelement enthält Informationen von einem anderen Tag als das letzte Element) {toggle background color}" Jedes Listenelement enthält Informationen für einen bestimmten Tag. Es könnte null, ein oder viele Gegenstände für jeden Tag geben. Die Listendaten werden in einer db gespeichert. – EirikO

Antwort

0

Sie müssen in HistoryListItem Modellklasse varible zum Speichern von Datum hinzuzufügen. Dann wird Ihre Adapterklasse so aussehen.

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

Danke. Ich musste nur HistoryListItem item = getItem (position) bewegen; bevor "Gegenstand" benutzt wird .. – EirikO

Verwandte Themen