2016-07-03 7 views
2

私はウィジェットに関するリストビュー情報に追加する:listviewでPicassoを使用するには?

public class Widget { 
    String w_type; 
    String title; 
    String desc; 
    String img; 
//.... 
} 

私はIMGのフィールドが空でない場合は、リストビューで画像を表示したいです。スクロール後にListViewで間違った画像を表示することなく、ピカソを使ってどのようにしたらいいですか?これは、リストビューのための私のアダプターからGetViewメソッドの現在のコードです:

public View getView(int i, View someView, ViewGroup arg2) { 
    LayoutInflater inflater = LayoutInflater.from(context); 
    if (someView == null) { 
     someView = inflater.inflate(R.layout.widgets_list, arg2, false); 
    } 

    ImageView img = (ImageView) someView.findViewById(R.id.pic); 

    String img_url = data.get(i).img; 
    if (!img_url.equals("")){ 
     Picasso.with(context).load(img_url).into(img); 
    } 
    return someView; 
} 

しかし、今のListViewは間違って表示され、画像を複製します。どうすれば修正できますか?

+0

は詳細をご覧ください.. '' getViewメソッドでViewHolder'() 'メソッドを実装し、この:http://stackoverflow.com/questions/23120238/using-picasso-library -with-listview – Ironman

答えて

1

ViewHolderパターンの使用をお勧めします。 より多くの情報はここで見つけることができます:あなたはあなたのimg_urlが実際に空である場合に対処しなければならないの

https://developer.android.com/training/improving-layouts/smooth-scrolling.html

テイクノート、あなたはときに、その場合のデフォルトの画像を設定し、そうでない場合はする必要がありますセルはリサイクルされ、イメージは変更されずに残っているので、あなたはその重複を経験します。以下

例コード:

@Override 
public View getView(int position, View convertView, ViewGroup viewGroup) { 

    ViewHolder holder; 

    if (convertView == null) { 
    convertView = LayoutInflater.from(mContext).inflate(R.layout.widgets_list, null); 
    holder = new ViewHolder(); 
    holder.mImageView = (ImageView) convertView.findViewById(R.id.iconImageView); 
    convertView.setTag(holder); 
    } else { 
    holder = (ViewHolder) convertView.getTag(); 
    } 

    //fetching your data object with the current position 
    Example example = mExamples[position]; 

    String img_url = example.get(i).img; 

    if (!img_url.equals("")){ 
    Picasso.with(context).load(img_url).into(holder.mImageView); 
    } else { 
    //todo - implement a default image in case img_url is indeed empty 
    Picasso.with(context).load(defaultImage).into(holder.mImageView); 
    } 

    return convertView; 
} 

private static class ViewHolder { 
    ImageView mImageView; 
} 
+0

素晴らしい!私はこのようなものを探してきました。ありがとう! – EpicSyntax

関連する問題