martes, 7 de febrero de 2012

Mostrar en lista lo devuelto por base de datos en #Android

En la entrada anterior del blog (aquí) lo que nos devolvía una consulta a la base de datos lo mostramos en un TextView. Pero es mucho mas elegante y funcional representar esos datos en una lista donde podamos hacer click en un elemento de la lista y manipularlos. Para ello están los elementos ListView. Es decir, vamos a hacer algo como esto:


Lo que vamos a hacer es una modificación del método showEvent(Cursor cursor), de modo que nos haremos un adapter que es empleado por los elementos ListView. Hay mucha documentación sobre el funcionamiento de los adapter, lo dejamos para otro día y vamos al grano.


El método showEvent queda ahora como sigue:
    public void showEvent(Cursor cursor){
         SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                    R.layout.item, cursor, representar, TO);
              setListAdapter(adapter);
    }
Como vemos tenemos que llamar a R.layout.item pasándole el cursor que hemos recibido, y dos variables llamadas representar y TO. Vamos con lo sencillo, con las dos variables, son las siguientes:
private static String[] representar = {NOMBRE, APELLIDOS, COSTEHORA};
private static int[] TO = {R.id.nombre, R.id.apellidos, R.id.costehora, };

Lo que hacemos es quedarnos con los campos que nos interesa dentro del cursor ya que por ejemplo no
queremos mostrar el ID de los usuarios.
Ahora lo difícil, el item que le hemos pasado al SimpleCursorAdaptater mediante R.layout.item. Esto no es mas que un xml donde le decimos el formato de la lista y los campos que queremos usar de la consulta. Por lo tanto tendremos el xml asociado al layout de la clase java y otro layout específico para formatear cada uno de los elementos de la lista llamado item.xml.
Como deberían de ser los dos archivos .xml a continuación. Primero el de la clase java donde metemos la lista:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:background="@color/background"
   android:layout_height="fill_parent"
   android:layout_width="fill_parent"
   android:orientation="vertical">
   <!-- Note built-in ids for 'list' and 'empty' -->
   <ListView
      android:id="@android:id/list"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:paddingLeft="3dip"
      android:paddingRight="3dip" />
   <TextView
      android:id="@android:id/empty"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="No events!" />         
    <Button
      android:id="@+id/crearpersona"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/crearpersona"
      android:onClick="crearpersona" />     
</LinearLayout>
Y luego el item.xml que representa los objetos:

<RelativeLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:background="@color/background"
   android:layout_height="35dip"
   android:layout_width="fill_parent"
   android:orientation="horizontal"
   android:gravity="center_vertical" >
    <TextView
      android:id="@+id/nombre"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:paddingLeft="6dip"
      android:textSize="20dip"
      />
    <TextView
      android:id="@+id/nombrecolon"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text=" "
      android:layout_toRightOf="@id/nombre" />
   <TextView
      android:id="@+id/apellidos"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_toRightOf="@id/nombrecolon"
      android:textSize="20dip" />
    <TextView
      android:id="@+id/apellidoscolon"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text=" "
      android:layout_toRightOf="@id/apellidos" />
   <TextView
      android:id="@+id/costehora"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_toRightOf="@id/apellidoscolon"
      android:textSize="20dip" />
   <TextView
      android:id="@+id/costehoracolon"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text=" €"
      android:layout_toRightOf="@id/costehora"
      android:textSize="20dip" />
</RelativeLayout>
Espero que os sirva!

LIBRO RECOMENDADO PARA APRENDER ANDROID

Uno de los libros fundamientales y que recomiendo para aprender Android y llegar a hacer aplicaciones profesionales es: Android 2 Application Developement de Reto Meier




1 comentario :