2016-03-25 11 views
0

Ich lade ein Bild von URL und geben Sie es in meine Listview. Das Problem ist, dass die Bildansicht das Bild jedes Mal ändert, wenn ich die Listenansicht scrolle.Android Listview laden Bildansicht von URL

Ich habe diesen Code aus: How to load an ImageView by URL in Android? Bilder von URL zu laden:

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

} 

In meinem ListAdapter ich verwende diesen Code, um das Bild zu laden:

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; 
} 

In meiner Haupttätigkeit:

Antwort

1

Sie sollten eine Bildladebibliothek wieverwenden. Es macht das Laden von Bildern aus URLs wirklich einfach und cachiert auch.

4

Versuchen Sie, Picasso library zu verwenden. Es ist sehr einfach zu bedienen, z.

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

Picasso verfügt über eine automatischen Speicher und Disk-Caching. Es ist sehr wichtig in ListView.

Woher bekomme ich den Variablennamen context?

Get Kontext:

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

laden Wo kann ich den Variablennamen „Kontext“ bekommen ?? – tokis

+0

@tokis Redigierte meine Antwort. –

1

ich mit den vorhandenen zwei Antworten zustimmen, der beste Ansatz keine Kopfschmerzen zu vermeiden und Ihr Leben leichter machen würde einer der Bildbibliotheken zu benutzen, die derzeit verfügbar sind: Picasso und Glide

Glide, die im Vergleich zu Picasso ebenso einfach zu bedienen ist. Ich habe ein Video gesehen, bei dem die Bilder länger brauchen, um Picasso zu laden, wenn eine Listenansicht verwendet wird, im Vergleich zu Glide, dies kann jedoch auf Konfigurationseinstellungen zurückzuführen sein. Glide ermöglicht auch die Verwendung von GIFs, die für Sie wichtig sein können oder auch nicht.

Hier ist ein Beispiel von Glide mit:

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

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

hoffe, das hilft!

1

Sie müssen Bild herunterladen und Caching-Bibliothek für ListView versuchen. das kann Leistung schneller machen und Bild in ImageView leicht laden.

Picasso und Glide sind das beste Beispiel Bild in ImageView in ListView

Verwandte Themen