2015-03-08 3 views
0

Я создал адаптер и пытаюсь заполнить ListView данными из String ArrayList. Я заметил, что каждый 4-й, 8-й и 12-й элементы, которые хранятся в моем ArrayList, отсутствуют в моем ListView. Если я удалить, если/другое (вид == NULL) состояние, все работает отлично, за исключением я получаю предупреждение ворса >>Unconditional layout inflation from view adapter: Should use View Holder pattern (use recycled view passed into this method as the second parameter) for smoother scrollingАдаптер не заполняется из ArrayList должным образом

Вот мой GetView код, который пропускает каждый 4-й, 8-й, 12-й пункт

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     View view = convertView; 
     ViewHolder holder; 
     if (view == null) { 
      LayoutInflater inflater = (LayoutInflater) mContext 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.item_select, null);   
      holder = new ViewHolder(); 

      holder.rlLeft = (RelativeLayout) view.findViewById(R.id.rl_left); 
      holder.rlRight = (RelativeLayout) view.findViewById(R.id.rl_right); 
      holder.tvTitle = (TextView) view.findViewById(R.id.tv_title); 
      holder.tvLeftBubble = (TextView) view.findViewById(R.id.tv_left_bubble); 
      holder.tvRightBubble = (TextView) view.findViewById(R.id.tv_right_bubble); 
      holder.tvTitle.setText(mArrySelect.get(position).getTitle()); 

      // set visibility gone on views 
      if (position % 2 == 0) { 
       holder.rlLeft.setVisibility(View.GONE); 
       holder.tvRightBubble.setText(mArrySelect.get(position).getMessage()); 
      } else { 
       holder.rlRight.setVisibility(View.GONE);    
       holder.tvLeftBubble.setText(mArrySelect.get(position).getMessage()); 
      } 

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

Вот код, который работает и отображает все элементы в моей mArraySelect (String ArrayList), но дает мне предупреждение пуха на моем Inflate

 @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 

      View view = convertView; 
      LayoutInflater inflater = (LayoutInflater) mContext 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.item_select, null);   
      holder = new ViewHolder(); 

      holder.rlLeft = (RelativeLayout) view.findViewById(R.id.rl_left); 
      holder.rlRight = (RelativeLayout) view.findViewById(R.id.rl_right); 
      holder.tvTitle = (TextView) view.findViewById(R.id.tv_title); 
      holder.tvLeftBubble = (TextView) view.findViewById(R.id.tv_left_bubble); 
      holder.tvRightBubble = (TextView) view.findViewById(R.id.tv_right_bubble); 
      holder.tvTitle.setText(mArrySelect.get(position).getTitle()); 

      // set visibility gone on views 
      if (position % 2 == 0) { 
       holder.rlLeft.setVisibility(View.GONE); 
       holder.tvRightBubble.setText(mArrySelect.get(position).getMessage()); 
      } else { 
       holder.rlRight.setVisibility(View.GONE);    
       holder.tvLeftBubble.setText(mArrySelect.get(position).getMessage()); 
      } 
     } 

Кто-нибудь есть идеи относительно того, что мне не хватает в моей первой реализации в вызвать пропустить? Мое состояние - просто чередовать два разных вида, и это работает нормально. Просто, что 4, 8 и 12-й элемент в моем String ArrayList не отображаются. В массиве всего 12 элементов.

Спасибо заранее!

ответ

1

Перемещение следующих кодов из стороны наружного большинства, если блок может решить этой проблему проблемного

// set visibility gone on views 
      if (position % 2 == 0) { 
       holder.rlLeft.setVisibility(View.GONE); 
       holder.tvRightBubble.setText(mArrySelect.get(position).getMessage()); 
      } else { 
       holder.rlRight.setVisibility(View.GONE);    
       holder.tvLeftBubble.setText(mArrySelect.get(position).getMessage()); 
      } 

Поставил чуть выше оператор возврата.

+0

Хех! Я не совсем понимаю это, но на самом деле это работает. Благодаря! – portfoliobuilder

+0

Вы получите ответ, как только подумаете, почему мы используем внешний блок if и объект держателя вида :) –

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