entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

como cargar imagenes asincronamente en un listview android

hola buenas noches quisiera que me pasaran un ejemplo de un listview con imagenes pero quiero cargar las imagenes asincronamente
me pueden ayudar con eso porfavor

1 Respuesta

1voto

white Puntos75580

Hola @javii124 Existe una clase que te podría ayudar, AsyncTask en donde cargarías las imagenes de fondo y agregarías un callback.

en esta pregunta http://entredesarrolladores.com/7762/como-utilizar-el-asynctask-de-android?show=7762#q7762
se explica como usar esta clase.

si deseas un ejemplo en concreto te dejo un zip con un proyecto en android studio con un simple adaptador para un listView, en ese proyecto hago uso de la clase que te mencioné.

https://db.tt/K82ntJBJ

javii124 comentado May 15, 2015

oye pero no se que estoy haciendo mal lo que pasa que nomAS me muestra 5 items de 10 que tengo que hacer ? le dejare el codigo fuente, y mil disculpas lo que pasa que soy novato

esta es una clase llamada guamuchil
package com.soymp.localizate;

import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.database.MatrixCursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.squareup.picasso.Picasso;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;

/**

  • Created by m05 on 09/05/2015.
    */
    public class guamuchil extends Activity {
    String url;
    ImageView imageView;
    private ArrayList<ListViewItem> data = new ArrayList();

    private ListView lista;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.guamuchil);

    //indicamos cual va a ser la url
    url = "http://localizt.com/imagendia/guamuchil/imagen.jpg";
    imageView = (ImageView) findViewById(R.id.imgdia);
    imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    String url = "http://www.soymp.com";
    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setData(Uri.parse(url));
    startActivity(i);
    }
    });

        Picasso.with(this).load(url).into(imageView);

    // generamos 20 o mas items con imagenes aleatorias
    for(int i = 0; i <= 10; i++) {

            String imageName = "image " + i;
    
            ListViewItem item = new ListViewItem();
    
            item.setTitle(imageName);
            item.setDescription(imageName + " description .... ");
            item.setUrl("http://localizt.com/imageneslocalizate/fuentes.jpg");
    
            data.add(item);
        }
    
        final ListViewAdapter adapter = new ListViewAdapter(this, data);
        final ListView list = (ListView)findViewById(R.id.ListView_listado);
    
        list.setAdapter(adapter);
    }

}

este se llama ListViewAdapter

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.Image;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

import java.io.InputStream;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashMap;

public class ListViewAdapter extends BaseAdapter {
private ArrayList<ListViewItem> data = new ArrayList();
private Context context;
private ArrayList<Integer> proccessed = new ArrayList();
private HashMap<String, Bitmap> imagesCache = new HashMap();
public ListViewAdapter(Context context, ArrayList data) {
this.context = context;
this.data = data;
}

@Override
public int getCount() {
    return data.size();
}

@Override
public Object getItem(int position) {
    return data.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

static class ViewHolder {
    TextView title;
    TextView description;
    ImageView thumbnail;
    int position;
}

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

    ViewHolder holder;
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    ListViewItem item = data.get(position);

    if(convertView == null)
    {
        convertView = inflater.inflate(R.layout.list_item, null);
        holder = new ViewHolder();

        holder.title = (TextView) convertView.findViewById(R.id.textView_superior);
        holder.description = (TextView) convertView.findViewById(R.id.textView_inferior);
        holder.thumbnail = (ImageView) convertView.findViewById(R.id.imageView_imagen);

        convertView.setTag(holder);
    }
    else
    {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.position = position;
    holder.title.setText(item.getTitle());
    holder.description.setText(item.getDescription());

    new getImageUrl(holder, position).execute(item.getUrl());
    //Picasso.with(context).load(item.getUrl()).into(holder.thumbnail);

    return convertView;
}

private class getImageUrl extends AsyncTask<String, Void, Bitmap> {

    private final WeakReference<ImageView> imageViewReference;
    private ImageView image;
    private ViewHolder holder;
    private int position;

    public getImageUrl(ViewHolder holder, int position) {
        this.holder = holder;
        this.position = position;
        this.image = holder.thumbnail;
        imageViewReference = new WeakReference<ImageView>(image);
    }

    protected Bitmap doInBackground(String... urls) {
        String url = urls[0];
        Bitmap bitmap = null;

        if (imagesCache.containsKey(url))
            return imagesCache.get(url);

        Log.d("imagepos", Integer.toString(position));

        try {
            InputStream in = new java.net.URL(url).openStream();
            bitmap = BitmapFactory.decodeStream(in);
            imagesCache.put(url, bitmap);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
        }

        return bitmap;
    }

    protected void onPostExecute(Bitmap bitmap) {
        if (position == holder.position) {
            imageViewReference.get().setImageBitmap(bitmap);
            notifyDataSetChanged();
        }
    }
}

}
y por ultimo esta se llama ListViewItem

package com.soymp.localizate;

/**

  • Created by m05 on 15/05/2015.
    */
    public class ListViewItem {

    private String title = null;
    private String description = null;
    private String url = null;

    public void setTitle(String title)
    {
    this.title = title;
    }

    public void setDescription(String description)
    {
    this.description = description;
    }

    public void setUrl(String url)
    {
    this.url = url;
    }

    public String getTitle()
    {
    return title;
    }

    public String getDescription()
    {
    return description;
    }

    public String getUrl()
    {
    return url;
    }

}

javii124 comentado May 22, 2015

oye puse 20 registros en el list view y repite las imagenes por que ?

white comentado May 23, 2015

te aseguraste de colocar diferentes imagenes en el listView?

ArrayList data = new ArrayList();

ListViewItem item = new ListViewItem();
item.setUrl("http://miweb.com/imagen_1.jpg");
data.add(item);

ListViewItem item2 = new ListViewItem();
item2.setUrl("http://miweb.com/imagen_2.jpg");
data.add(item2);

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Actividad Reciente

¿Eres Usuario Apple?

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta