2016-08-03 2 views
0

Я использую пользовательский ListView в своем приложении. Проблема в том, что объект «Pedido» может иметь атрибут «timestampAtendimento» как нулевой атрибут, и в этом случае TextView на моем макете элемента и цвет фона элемента не должен изменяться. Однако, даже если атрибут имеет значение null, класс «ListaPedidosRowAdapter» изменяет значение атрибута, делая его не равным null (значение устанавливается со значением другого объекта в списке).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

Ничего себе! Я потратил так много времени, и решение так просто! Большое спасибо моему другу, это очень помогло. –

Смежные вопросы