2015-03-08 64 views
0

我創建了一個適配器,並試圖使用String ArrayList中的數據填充ListView。我注意到的是,存儲在我的ArrayList中的每個第4,第8和第12項不存在於我的ListView中。如果我刪除的if/else(查看== 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(字符串ArrayList的),但使我對我的充氣棉絨警告

 @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()); 
      } 
     } 

任何人都有一個想法,我在我的第一次執行到我缺少的代碼導致跳過視圖?我的國防部條件只是爲了交替兩個不同的意見,並且工作正常。只是我的String ArrayList中的第4,8和12項沒有顯示。該陣列只有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()); 
      } 

把它只是return語句以上。

+0

嘿!我不太明白,但這確實有效。謝謝! – portfoliobuilder 2015-03-08 22:22:10

+0

一旦你認爲我們爲什麼使用外部if塊和視圖持有者對象,你會得到答案:) – 2015-03-08 22:25:02