2016-08-03 76 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

哇!我花了很多时间,解决方案非常简单!非常感谢我的朋友,它非常有帮助。 –