2016-04-14 35 views
0

我有一個自定義適配器的列表,並希望根據列表項或變量的內容設置背景顏色。 該列表由包含日期和一些信息的文本視圖組成。基於內容/變量更改listitem背景

我需要的背景顏色時,將顯示一個新的日期來改變..

物品1:2,2016年3月 - >藍

ITEM2:2. 2016年3月 - >藍

項目3 :3,2016年3月 - >灰色

ITEM4:4,2016年3月 - >藍

...

我可以設置一個可以在listAdapter中使用的變量(isNewDate)嗎?

我的目錄適配器:

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是一個變量的建議,如果背景顏色應該與最後一個項目相同,或者切換到第二個背景顏色,則該變量可能爲true或false。 標準是「如果(列表項包含不同於上一個項目的信息){切換背景色}」 每個列表項都包含特定日期的信息。每天可能有零個,一個或多個項目。 列表數據存儲在數據庫中。 – 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(position);之前使用「項目」.. – EirikO