2016-03-25 17 views
0

URLから画像を読み込んでリストビューに入力しています。問題は、リストビューをスクロールするたびにイメージビューがイメージを変更していることです。AndroidリストビューURLからの画像ビューの読み込み

私がこのコードを使用:URLからイメージをロードするためにHow to load an ImageView by URL in Android?:私の主な活動で

public View getView(int position, View convertView, ViewGroup parent){ 
    ViewHolderItem holder = new ViewHolderItem(); 
    if (convertView == null) { 
    LayoutInflater inflater = (LayoutInflater) main.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.cell, null); 

     holder.name = (TextView) convertView.findViewById(R.id.name); 
     holder.thumb = (ImageView) convertView.findViewById(R.id.thumb); 
     holder.duration = (TextView) convertView.findViewById(R.id.duration); 
     //holder.code = (TextView) convertView.findViewById(R.id.code); 
     convertView.setTag(holder); 
    } 
    else{ 
     holder = (ViewHolderItem) convertView.getTag(); 
    } 


    holder.name.setText(this.main.countries.get(position).title); 
    if (holder.thumb != null) { 
     new DownloadImageTask(holder.thumb).execute(this.main.countries.get(position).thumb); 
    } 
    return convertView; 
} 

::私は、画像をアップロードするには、このコードを使用し私のListAdapterで

public class ImageLoadTask extends AsyncTask<Void, Void, Bitmap> { 

    private String url; 
    private ImageView imageView; 

    public ImageLoadTask(String url, ImageView imageView) { 
     this.url = url; 
     this.imageView = imageView; 
    } 

    @Override 
    protected Bitmap doInBackground(Void... params) { 
     try { 
      URL urlConnection = new URL(url); 
      HttpURLConnection connection = (HttpURLConnection) urlConnection 
        .openConnection(); 
      connection.setDoInput(true); 
      connection.connect(); 
      InputStream input = connection.getInputStream(); 
      Bitmap myBitmap = BitmapFactory.decodeStream(input); 
      return myBitmap; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Bitmap result) { 
     super.onPostExecute(result); 
     imageView.setImageBitmap(result); 
    } 

} 

public void get_data(String data){ 
     try { 
      JSONArray data_array=new JSONArray(data); 
      for (int i = 0 ; i < data_array.length() ; i++){ 
       JSONObject obj=new JSONObject(data_array.get(i).toString()); 

       Countries add=new Countries(); 
       add.title = obj.getString("title"); 
       add.thumb = obj.getString("artwork_url"); 

       countries.add(add); 
      } 

      adapter.notifyDataSetChanged(); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

答えて

1

のような画像読み込みライブラリを使用する必要があります3210。これは、URLからのイメージのロードを非常にシンプルにし、キャッシングも行います。

4

Picasso libraryを使用してください。それは非常に使いやすい、例えば。

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); 

ピカソには自動メモリとディスクキャッシュがあります。 ListViewでは非常に重要です。

どこで変数名contextを入手できますか?

はコンテキストを取得:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Context context = parent.getContext(); 
    [...] 
} 
+0

ImageViewで画像をロードするための最良の例です?? – tokis

+0

@tokis私のaswerを編集しました。 –

1

は、私は、既存の2つの答えに同意し、任意の頭痛を回避し、あなたの人生を容易にするための最良のアプローチは、現在利用可能な画像ライブラリのいずれかを使用することです: PicassoおよびGlide

グライドは、ピカソと比較して同様に使いやすいです。 Glideと比較して、リストビューを使ったときにピカソで画像が読み込まれる時間が長くなるビデオは見たことがありますが、これは設定の設定次第です。グライドはまた、あなたにとって重要であるかもしれない、あるいは重要でないかもしれないGIFの使用を可能にします。ここで

はグライドを使用しての例です:

ImageView imageView = (ImageView) findViewById(R.id.my_image_view); 

Glide.with(this).load("https://lh6.ggpht.com/9SZhHdv4URtBzRmXpnWxZcYhkgTQurFuuQ8OR7WZ3R7fyTmha77dYkVvcuqMu3DLvMQ=w300").into(imageView); 

は、この情報がお役に立てば幸い!

1

ListViewの画像ダウンロードとキャッシングライブラリを試す必要があります。パフォーマンスが向上し、画像をImageViewに簡単に読み込むことができます。

PicassoGlideは、私は変数名「コンテキスト」を取得することができますListView

関連する問題