Ejemplo de ListView con Imágenes

En este Ejemplo Realizaremos una Actividad que Muestra un listado de productos Almacenados en una Base de Datos.

Paso 1: Crearemos un nuevo Proyecto Android el cual yo Llame EjemploListView en el cual crearemos una actividad del tipo EmptyActivity que llamaremos MainActivity

Paso 2:  En nuestra ventana xml activity_main.xml agregaremos un componente ListView el cual llamaremos Lista. quedando el código de la siguiente manera:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.profeluismitre.ejemplolistview.MainActivity">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/lista">        
    </ListView>

</LinearLayout>

Paso 3: crearemos un archivo xml que sera el cual insertaremos a la lista con la imagen e información de cada producto el archivo lo llamaremos elementos_lista.xml, para crearlo daremos Clic derecho sobre la carpeta layout NEW>XML>LAYOUT XML el codigo quedario de la siguiente manera:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:gravity="center"
    android:layout_height="match_parent">
        <ImageView
            android:id="@+id/imgMenu"
            android:layout_width="100dp"
            android:layout_height="100dp"/>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:orientation="vertical">
                <TextView
                    android:id="@+id/txtCodigoLista"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:background="@android:color/transparent"
                    android:text="Codigo:"
                    android:layout_gravity="center"
                    android:textColor="@android:color/black"
                    android:textSize="25dp" />
                <TextView
                    android:id="@+id/txtDescripcionLista"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:background="@android:color/transparent"
                    android:text="Descripcion:"
                    android:layout_gravity="center"
                    android:textColor="@android:color/black"
                    android:textSize="25dp" />
                <TextView
                    android:id="@+id/txtPrecioLista"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:background="@android:color/transparent"
                    android:text="Precio:"
                    android:layout_gravity="center"
                    android:textColor="@android:color/black"
                    android:textSize="25dp" />
                <TextView
                    android:id="@+id/txtCantidadLista"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:background="@android:color/transparent"
                    android:text="Cantidad:"
                    android:layout_gravity="center"
                    android:textColor="@android:color/black"
                    android:textSize="25dp" />
        </LinearLayout>
</LinearLayout>

Paso 4: Ahora creamos nuestra clase de MiBaseDatos que sera la encargada de crear la base de datos y por consiguiente almacenar la información.

public class MiBaseDatos extends SQLiteOpenHelper{
    private static final String TABLA_PRODUCTO =
            "CREATE TABLE productos (codigo TEXT PRIMARY KEY, descripcion TEXT, precio TEXT, cantidad TEXT, imagen INTEGER)";
    private static final String SQL_DELETE_PRODUCTOS =
            "DROP TABLE IF EXISTS productos";
    public static final String NOMBRE_BD = "EjemploListView.sqlite";
    public MiBaseDatos(Context contexto){
        super(contexto, NOMBRE_BD, null, 1);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(TABLA_PRODUCTO);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1) {
        db.execSQL(SQL_DELETE_PRODUCTOS);
        onCreate(db);
    }
}

Paso 5: Crearemos nuestra clase que almacenara la informacion del producto para poder armar el listado la cual llamaremos Productos:

public class Productos {
    private String codigo;
    private String descripcion;
    private String precio;
    private String cantidad;
    private int imagen;
    
    public Productos(){}
    
    public Productos(String codigo, String descripcion, String precio, String cantidad, int imagen) {
        this.codigo = codigo;
        this.descripcion = descripcion;
        this.precio = precio;
        this.cantidad = cantidad;
        this.imagen = imagen;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public String getPrecio() {
        return precio;
    }

    public void setPrecio(String precio) {
        this.precio = precio;
    }

    public String getCantidad() {
        return cantidad;
    }

    public void setCantidad(String cantidad) {
        this.cantidad = cantidad;
    }

    public int getImagen() {
        return imagen;
    }

    public void setImagen(int imagen) {
        this.imagen = imagen;
    }
}

Paso 6:  Creamos la Clase que llamaremos ProductosAdapter la cual sera la encargada de recibir el producto y armar la ventana para mostrar en la lista:

public class ProductosAdapter extends ArrayAdapter<Productos> {
    public ProductosAdapter(Context context) {
        super(context, R.layout.elementos_lista, R.id.txtCodigoLista);

    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        TextView txtCodigo = (TextView) view.findViewById(R.id.txtCodigoLista);
        TextView txtDescripcion = (TextView) view.findViewById(R.id.txtDescripcionLista);
        TextView txtPrecio = (TextView) view.findViewById(R.id.txtPrecioLista);
        TextView txtCantidad = (TextView) view.findViewById(R.id.txtCantidadLista);
        ImageView imagen = (ImageView) view.findViewById(R.id.imgMenu);
        Productos producto = getItem(position);

        txtCodigo.setText(producto.getCodigo());
        txtDescripcion.setText(producto.getDescripcion());
        txtPrecio.setText(producto.getPrecio());
        txtCantidad.setText(producto.getCantidad());
        imagen.setImageResource(producto.getImagen());
        return view;
    }

}

Paso 7: Ahora en MainActivity preparamos para crear el listado:

  • Lo Primero que haremos sera crear los objetos necesarios:
MiBaseDatos baseDatos;
ListView lista;
ProductosAdapter adaptadorLista;
  • Ahora inicializaremos el objeto lista:
    lista=(ListView)findViewById(R.id.lista);
  • Para este ejemplo crearemos un método que llamaremos grabarBaseDatos(), en el cual grabaremos los productos en la base de datos para poder mostrarlos posteriormente:  Link para bajar Imagenes necesarias   :
public void grabarBaseDatos(){
        int imagenes[]={R.drawable.cereal1,R.drawable.cereal2,R.drawable.cereal3,
                R.drawable.fruta1,R.drawable.fruta2,R.drawable.fruta3,R.drawable.refresco1,
                R.drawable.refresco2,R.drawable.refresco3};
        String descripcion[]={"ChocoCrispy","Frostie","Froot Loop","Naranja","Fruta Estrella","Platano","Coca-cola","Mundet","Coca-Light"};
        String precio[]={"10.5","25","20","12.99","25.4","12.3","24","23.5","19.5"};
        String cantidad[]={"10","10","10","10","10","10","10","10","10"};
        String codigo[]={"123","456","789","987","654","321","759","258","369"};
        baseDatos=new MiBaseDatos(getApplicationContext());
        SQLiteDatabase sql=baseDatos.getWritableDatabase();

        for (int x=0;x<imagenes.length;x++){
            ContentValues valores=new ContentValues();
            valores.put("codigo",codigo[x]);
            valores.put("descripcion",descripcion[x]);
            valores.put("precio",precio[x]);
            valores.put("cantidad",cantidad[x]);
            valores.put("imagen",imagenes[x]);
            sql.insert("productos",null,valores);
        }
        sql.close();
    }
  •    Una vez que ya insertamos los datos prodeceremos a inicializar nuestro adaptador:
    adaptadorLista=new ProductosAdapter(this);
    
  • Ahora crearemos el metodo que llamaremos cargarDatos() el cual sera el encargado de leer la base de datos y agregarlos al adaptador:
    public void cargarDatos(){
            baseDatos=new MiBaseDatos(getApplicationContext());
            SQLiteDatabase sql=baseDatos.getReadableDatabase();
            String[] columnas={"codigo","descripcion","precio","cantidad","imagen"};
            Cursor cursor=sql.query("productos",columnas,null,null,null,null,null);
            while(cursor.moveToNext()){
                adaptadorLista.add(new Productos(
                        cursor.getString(cursor.getColumnIndex("codigo")),
                        cursor.getString(cursor.getColumnIndex("descripcion")),
                        cursor.getString(cursor.getColumnIndex("precio")),
                        cursor.getString(cursor.getColumnIndex("cantidad")),
                        cursor.getInt(cursor.getColumnIndex("imagen"))
                ));
            }
            sql.close();
        }

     

  • Ahora agregamos el adaptador a la lista:
    adaptadorLista.notifyDataSetChanged();
    lista.setAdapter(adaptadorLista);

El codigo de MainActivity quedaria de la Siguiente Manera:

public class MainActivity extends AppCompatActivity {
    MiBaseDatos baseDatos;
    ListView lista;
    ProductosAdapter adaptadorLista;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lista=(ListView)findViewById(R.id.lista);
        grabarBaseDatos();
        adaptadorLista=new ProductosAdapter(this);
        cargarDatos();
        adaptadorLista.notifyDataSetChanged();
        lista.setAdapter(adaptadorLista);
    }
    public void grabarBaseDatos(){
        int imagenes[]={R.drawable.cereal1,R.drawable.cereal2,R.drawable.cereal3,
                R.drawable.fruta1,R.drawable.fruta2,R.drawable.fruta3,R.drawable.refresco1,
                R.drawable.refresco2,R.drawable.refresco3};
        String descripcion[]={"ChocoCrispy","Frostie","Froot Loop","Naranja","Fruta Estrella","Platano","Coca-cola","Mundet","Coca-Light"};
        String precio[]={"10.5","25","20","12.99","25.4","12.3","24","23.5","19.5"};
        String cantidad[]={"10","10","10","10","10","10","10","10","10"};
        String codigo[]={"123","456","789","987","654","321","759","258","369"};
        baseDatos=new MiBaseDatos(getApplicationContext());
        SQLiteDatabase sql=baseDatos.getWritableDatabase();

        for (int x=0;x<imagenes.length;x++){
            ContentValues valores=new ContentValues();
            valores.put("codigo",codigo[x]);
            valores.put("descripcion",descripcion[x]);
            valores.put("precio",precio[x]);
            valores.put("cantidad",cantidad[x]);
            valores.put("imagen",imagenes[x]);
            sql.insert("productos",null,valores);
        }
        sql.close();
    }
    public void cargarDatos(){
        baseDatos=new MiBaseDatos(getApplicationContext());
        SQLiteDatabase sql=baseDatos.getReadableDatabase();
        String[] columnas={"codigo","descripcion","precio","cantidad","imagen"};
        Cursor cursor=sql.query("productos",columnas,null,null,null,null,null);
        while(cursor.moveToNext()){
            adaptadorLista.add(new Productos(
                    cursor.getString(cursor.getColumnIndex("codigo")),
                    cursor.getString(cursor.getColumnIndex("descripcion")),
                    cursor.getString(cursor.getColumnIndex("precio")),
                    cursor.getString(cursor.getColumnIndex("cantidad")),
                    cursor.getInt(cursor.getColumnIndex("imagen"))
            ));
        }
        sql.close();
    }
}

 

Con esto QUEDARÍA terminada la APLICACIÓN y TENDRÍAS que ver algo parecido a la SIGUIENTE imagen: