2016-08-03 90 views
0

我在我的應用程序中使用自定義ListView。問題是,對象「Pedido」可以具有屬性「timestampAtendimento」作爲null屬性,在這種情況下,我的項目佈局上的TextView和項目背景顏色不應該改變。但是,即使屬性爲null,類「ListaPedidosRowAdapter」也會更改該屬性的值,使其不爲空(該值將使用列表中另一個對象的值進行設置)。Android:ArrayAdapter正在改變對象屬性

我調試了幾次程序,發現對象列表是正確的,問題發生在「ListaPedidosRowAdapter」類中。但我不知道爲什麼會發生。

有人可以幫助我嗎?

這就是我的 「ListaPedidosRowAdapter」 類:

public class ListaPedidosRowAdapter extends ArrayAdapter<Pedido> { 

    private List<Pedido> pedidos; 
    private Context context; 

    public ListaPedidosRowAdapter(List<Pedido> pedidos, Context context) { 
     super(context, item_lista_pedidos); 

     this.pedidos = pedidos; 
     this.context = context; 
    } 

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

     if(convertView == null){ 
      convertView = LayoutInflater.from(context).inflate(item_lista_pedidos, null, true); 
      holder = new ViewHolder(); 
      holder.itemNomePratoTextView = (TextView) convertView.findViewById(R.id.itemNomePratoTextView); 
      holder.itemQtdPedidoTextView = (TextView) convertView.findViewById(R.id.itemQtdPedidosTextView); 
      holder.itemGarcomNomeTextView = (TextView) convertView.findViewById(R.id.itemGarcomNomeTextView); 
      holder.itemTimestampPedidoTextView = (TextView) convertView.findViewById(R.id.itemTimestampPedidoTextView); 
      holder.itemTimestampAtendimentoTextView = (TextView) convertView.findViewById(R.id.itemTimestampAtendimentoTextView); 

      convertView.setTag(holder); 
     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     Pedido pedido = pedidos.get(position); 

     holder.itemNomePratoTextView.setText(pedido.nomeServico); 
     holder.itemGarcomNomeTextView.setText(pedido.usuario); 
     holder.itemTimestampPedidoTextView.setText(ValidateDate.getDateTimeForView(pedido.timestampPedido)); 
     holder.itemQtdPedidoTextView.setText(Integer.toString(pedido.quantidade)); 
     // if the attribute is null do not change the text view 
     if(pedido.timestampAtendimento != null) { 
      holder.itemTimestampAtendimentoTextView.setText(ValidateDate.getDateTimeForView(pedido.timestampAtendimento)); 
      convertView.setBackgroundResource(R.drawable.item_list_disabled); 
     } 

     return convertView; 
    } 

    @Override 
    public int getCount(){ return pedidos.size(); } 

    static class ViewHolder{ 
     public TextView itemNomePratoTextView; 
     public TextView itemQtdPedidoTextView; 
     public TextView itemGarcomNomeTextView; 
     public TextView itemTimestampPedidoTextView; 
     public TextView itemTimestampAtendimentoTextView; 
    } 
} 

回答

1

這裏的竅門:

if(pedido.timestampAtendimento != null) { 
    holder.itemTimestampAtendimentoTextView.setText(ValidateDate.getDateTimeForView(pedido.timestampAtendimento)); 
    convertView.setBackgroundResource(R.drawable.item_list_disabled); 
} else { 
    holder.itemTimestampAtendimentoTextView.setText(""); 
    convertView.setBackgroundDrawable(null); 
} 

你必須記住該行的觀點被重用。對於每個將您的視圖與您的數據綁定的if條件,如果不適用此條件,則需要使用else之一進行清理。

+0

哇!我花了很多時間,解決方案非常簡單!非常感謝我的朋友,它非常有幫助。 –