Rellenar un ListView con SQLite

Ya son varias la veces que me pedis que os explique como rellenar un ListView, un Spinner o otra estructura desde una base de datos así que hoy voy a explicar como hacerlo.


Vamos a aprovechar el artículo que ya escribí hace tiempo de como acceder a base de datos para hacer el artículo lo más liviano posible, para ello leeros antes el artículo sobre como tratar datos en bases de datos. Una vez creada vuestra clase para tratar datos echarle un vistazo a este artículo para ver como leer los datos de la base de datos.

Nuestros datos los debemos traer en un objeto Cursor. Hacemos una consulta como la siguiente. Esto lo podéis ver en los artículos que os indique antes. Fijaros que para el identificador le creamos un alias con un guión delante, esto es importante porque si no le damos este nombre el SimpleCursorAdapter no sabrá cual es el id.

public Cursor leerLibros(){
 SQLiteDatabase db = getReadableDatabase();
  
 return db.rawQuery("SELECT id AS _id, libro AS name FROM libros;", null);  
}


Ahora vamos a crear un layout llamado row.xml que será donde mostraremos el texto. En Android existen layouts ya preparadas para esto, pero esta vez utilizaré esta plantilla por si quereis cambiar su aspecto que os sea sencillo.

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dip"/>

Ahora en nuestra Activity vamos a rellenar un ListView. En nuestra Activity simplemente tendremos un ListView llamado listview. Y en el onCreate ejecutamos lo siguiente:

ListView listView = (ListView) findViewById(R.id.listView);

bbdd bbdd = new bbdd(this);

Cursor cursor = bbdd.leerLibros();
startManagingCursor(cursor);

String[] from = new String[]{"name"};
int[] to = new int[]{R.id.text};

SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, R.layout.row, cursor, from, to);

listView.setAdapter(cursorAdapter);

Con esto último ya está listo nuestro código. Instanciamos nuestro ListView, también nuestra clase de base de datos y llamamos al método leerLibros.

Por otro lado preparamos un array, from, con los nombres de las columnas en este caso solo será name. También otro, to, con los ids de los elementos donde se ubicarán los datos de nuestra base de datos. De este modo le decimos que los datos de la columna name se ubican en el TextView con el id text.

Por último enlazamos el SimpleCursorAdapter al ListView con el método setAdapter.

Comments are closed.