2011-02-10 10 views
1

私はリサイクルされたリストビューデータを避けるための標準的なパターンに従うと信じていますが、私は失敗します。いつものように、リストビューの最後の2つの項目あなたも、あなたのViewHolderのすべてのメンバーのためのコンテンツを設定する必要がListAdaptersでリサイクルされたアイテムの問題を回避する方法は?

public static class ViewHolder { 
    public ImageView img1; 
    public ImageView img2; 
    public TextView text1; 
    public TextView text2; 
    public TextView text3; 
    public TextView text4; 
    } 

public View getView(int position, View convertView, ViewGroup parent) { 
     View vi=convertView; 
     ViewHolder holder; 
     if(convertView == null){ 
      vi = inflater.inflate(R.layout.item, null); 
      holder=new ViewHolder(); 
      holder.text1=(TextView)vi.findViewById(R.id.text1); 
      holder.text2=(TextView)vi.findViewById(R.id.text2); 
      holder.text3=(TextView)vi.findViewById(R.id.text3); 
      holder.text4=(TextView)vi.findViewById(R.id.text4);   
      holder.img1=(ImageView)vi.findViewById(R.id.img1); 
        holder.img2=(ImageView)vi.findViewById(R.id.img2); 
      vi.setTag(holder); 
     } else { 
      holder=(ViewHolder)vi.getTag(); 
     } 

      String shorten=shortenText(t4); 
    holder.text.setTag(shorten); 
    holder.text.setText(shorten); 

    if(t1){ 
     holder.text1.setTag(thisMsg.get(D_ENUM.T1)); 
     holder.innerName.setText(thisMsg.get(thisMsg.get(D_ENUM.T1)); 
    } 
    if(t2){ 
     holder.text1.setTag(thisMsg.get(D_ENUM.T2)); 
     holder.innerName.setText(thisMsg.get(thisMsg.get(D_ENUM.T2)); 
    } 
    if(thisMsg.containsKey(D_ENUM.T3)){ 
     String t3 = shortenText(thisMsg.get(D_ENUM.T3)); 
     holder.innerDesc.setTag(t3); 
     holder.innerDesc.setText(t3); 
    } 

    holder.img1.setTag(img1); 
    imageLoader.DisplayImage(img1, act, holder.img1); 

    if(img2 != null) { 
     holder.innerImage.setTag(img2); 
     holder.innerImage.setVisibility(View.VISIBLE); 
     imageLoader.DisplayImage(img2, act, holder.img2); 
    } else { 
     holder.innerImage.setTag(img2); 
     holder.innerImage.setVisibility(View.GONE); 
    } 

    return vi; 

答えて

3

(倍を下回っている...他の前の位置からデータを取得します)これは、何も表示されていなければ空の値に設定することを意味します。

渡されたビュー(convertView)および関連付けられたViewHolder(holder)は、以前のgetView関数の実行によって作成されたことを理解しています。それらはデフォルト値で新しく作成されたオブジェクトではありません

+0

ありがとうございます。私はちょうど今それを得るかもしれないように感じる..... – hunterp

+0

あなたの答えのこの部分は "あなたが表示することが何もない場合空の値にそれらを設定することを意味しても、ありがとう。私をたくさん助けてください:D – AlvaroSantisteban

関連する問題