2016-04-14 24 views
0

Özel bir adaptöre sahip bir listeye sahibim ve liste öğesinin veya bir değişkenin içeriğine göre arka plan rengini ayarlamak istiyorum. Liste, bir tarih ve bazı bilgiler içeren bir metin görünümünden oluşur. Yeni bir tarih gösterildiğinde değiştirmek için arka plan rengini ihtiyaçListitem arka planını içerik/değişkene göre değiştirin

..

Öğe1: 2. Mart 2016 -> mavi

item2: 2. Mart 2016 -> mavi

item3 : Mart 2016 3. -> gri

item4: Mart 2016 4. -> mavi

...

ListAdapter'te kullanılabilecek bir değişken (isNewDate) ayarlayabilir miyim?

Listem adaptörü:

Sen HistoryListItem modeli sınıfında mağaza bugüne kadar varible dile eklemem gerekiyor
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 ile ne demek istiyorsunuz ve liste öğelerinin arka plan rengini değiştirmek için sahip olduğunuz kriter nedir? –

+0

isNewDate, arka plan renginin son öğe ile aynı olması veya ikinci arka plan rengine geçiş yapması durumunda, true veya true olarak değiştirilebilecek bir değişkenin öneriydi. Kriterler "(öğenin öğesi son öğeden farklı bir günden itibaren bilgi içeriyorsa) {arka plan rengini değiştir"} Her bir liste, belirli bir güne ilişkin bilgileri içerir. Her gün için sıfır, bir veya birçok öğe olabilir. Liste verileri bir db'de saklanır. – EirikO

cevap

0

. Ardından adaptör sınıfınız böyle görünecektir.

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

Teşekkürler. Sadece HistoryListItem item = getItem (position); "item" den önce kullanılır .. – EirikO

İlgili konular