¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Desarrolle una aplicación Android
  3. Controles avanzados
Extrait - Desarrolle una aplicación Android Programación en Java con Android Studio
Extractos del libro
Desarrolle una aplicación Android Programación en Java con Android Studio
1 opinión
Volver a la página de compra del libro

Controles avanzados

Las listas

La primera pantalla de la aplicación, que se presenta al usuario durante el arranque, debe mostrar la lista de DVD contenidos en la base de datos. Cuando el usuario hace clic en uno de los elementos de la lista, se muestra una segunda pantalla, que presenta la ficha del DVD creada en el capítulo Principios básicos de Android.

Para mostrar los DVD registrados en la base de datos, sería posible utilizar únicamente los componentes que ya hemos abordado en los anteriores capítulos: para cada DVD mostrado, bastaría con crear dinámicamente componentes TextView que mostraran las propiedades del DVD.

En su lugar, Android provee un componente ListView, cuya función es mostrar cualquier tipo de dato en forma de una lista: este componente está optimizado para gestionar mejor la memoria, y presenta rendimientos que serían difíciles de igualar construyendo dinámicamente la lista.

1. Integrar una lista

El framework Android propone dos técnicas diferentes para integrar una lista en una pantalla:

  • Utilizar la clase ListActivity, que propone una implementación muy sencilla pero con posibilidades limitadas.

  • Integrar el componente ListView en un layout e implementar el mecanismo de presentación de los datos.

La primera solución, que recurre a la clase ListActivity, solo permite mostrar dos propiedades como máximo para cada elemento de la lista. La segunda solución, más completa, ofrece una libertad total al desarrollador en la visualización: es el método que utilizaremos aquí.

Esta implementación completa utiliza tres elementos:

  • El componente ListView, que debe integrarse en un archivo de layout (o instanciarse dinámicamente en el código de la actividad).

  • Un archivo de layout para precisar la visualización de cada elemento de la lista.

  • Un adaptador para gestionar los datos.

a. Integrar un componente ListView

El componente ListView es un contenedor de vista, similar al componente LinearLayout, por ejemplo. La declaración en un archivo de layout sigue, por tanto, exactamente las mismas reglas que para cualquier componente, al menos para las propiedades comunes a todos los componentes.

Aquí, el componente ListView debe agregarse al layout de la primera pantalla, correspondiente a la clase MainActivity. Hay que integrar por lo tanto una etiqueta ListView en el archivo...

GridView, lista desplegable

1. Componente GridView

Además del componente ListView, Android proporciona también un contenedor de vista que presenta los datos en forma de matriz: el GridView.

Este componente funciona exactamente igual que el componente ListView: necesita un adaptador, que es el mismo que para ListView.

Presenta, sin embargo, la propiedad numColumns, que permite identificar cuántas columnas se mostrarán por fila.


<GridView  
    android:id="@+id/main_Grid"  
    android:numColumns="3"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"/>
 

2. Lista desplegable

La plataforma proporciona un componente que muestra una lista desplegable, llamada Spinner.

El componente Spinner utiliza, como el componente ListView, un adaptador para gestionar los datos. Además de las características vistas para el componente ListView, el adaptador que se utiliza para el Spinner debe implementar la interfaz SpinnerAdapter.

Esta interfaz exige, además del método getView, la implementación del método getDropDownView:


View getDropDownView(int position, View convertView, ViewGroup  
parent)
 

El método getDropDownView se invoca para mostrar cada elemento de la lista desplegable. El método getView, por su parte, se encarga de la representación...

TimePicker/DatePicker

El usuario de la aplicación quiere poder almacenar en la base de datos la fecha del último visionado de cada DVD. Para ello, hay que agregar un campo en la tabla donde se registran los datos de cada DVD, e incorporar la posibilidad de introducir esta fecha a través de la aplicación: en lugar de crear una pantalla específica, se ha decidido simplemente agregar un botón en la ficha de visualización del DVD. Este botón debe provocar la apertura de una ventana pop-up que presente un componente de selección de fecha.

1. Agregar un campo fecha de visionado

La fecha de visionado se almacena como un valor entero long en la base de datos: hay que agregar la columna correspondiente en la tabla DVD.

La tabla se creó en versión 1 en el capítulo Persistencia de datos, y aquí debe pasar a versión 2. De modo que hay que modificar el archivo LocalSQLiteOpenHelper.java, creado previamente.

 Abra el archivo en el editor de Android Studio.

 Modifique el valor de la constante DB_VERSION asignándole el valor 2.

 Defina un método upgradeToVersion2, con la siguiente firma:


private void upgradeToVersion2(SQLiteDatabase db)
 

El método upgradeToVersion2 debe agregar una columna al esquema de la tabla DVD. Como para la creación de la tabla, esto se realiza ejecutando un comando SQL e invocando al método execSQL de la clase SQLiteDatabase

El método upgradeToVersion2 es, por tanto, el siguiente:


private void upgradeToVersion2(SQLiteDatabase db) {  
    String sqlCommand = "ALTER TABLE DVD ADD COLUMN   
fechaVisionado NUMERIC";  
    db.execSQL(sqlCommand);  
}
 

También hay que agregar la llamada al método upgradeToVersion2 en el cuerpo del método sobrecargado onUpgrade.


@Override  
public void onUpgrade(SQLiteDatabase db, int oldVersion, int  
newVersion) {  
    for(int i = oldVersion;i<newVersion;i++)  {  
        int versionToUpdate = i+1;  
        if(versionToUpdate==2) {  
            upgradeToVersion2(db);  
        } else if(versionToUpdate==3) {  
            //...

Crear nuestro propio componente reutilizable

Es evidente que el componente DatePicker utilizado en la sección anterior encapsula, de hecho, un conjunto de componentes: botones, zonas de texto, texto editable.

En efecto, la plataforma Android permite a los desarrolladores crear sus propios componentes, ya sea a partir de componentes existentes o bien creando un componente de varias piezas.

Para crear un componente a partir de componentes existentes de la plataforma, existen dos enfoques posibles: bien sobrecargar un componente existente, o bien reunir un conjunto de componentes en una clase e integrar la lógica de funcionamiento.

1. Sobrecargar un componente de la plataforma

Sobrecargar un componente de la plataforma es la solución más sencilla para crear nuestro propio componente. Utilizado habitualmente para agregar funcionalidades a un componente existente, este método solo requiere, por lo general, la creación de una clase Java que herede de la clase del componente inicial.

Así, por ejemplo, para extender un componente de tipo TextView, hay que declarar una clase que herede de android.widget.TextView.


public class MiTextView extends TextView {  
    [...]  
}
 

Para poder utilizarlo como los demás componentes de la plataforma, es necesario implementar dos constructores para la clase:

  • Un constructor que reciba como parámetro el contexto de ejecución. Este constructor se utiliza para instanciar el componente en el código Java.

  • Un constructor que reciba como parámetro el contexto de ejecución y una colección de tipo AttributeSet, que permite obtener una referencia a los parámetros informados en el archivo de layout para el componente.

Por ejemplo:


public class MiTextView extends TextView {  
    public MiTextView(Context context) {  
        super(context);  
    }  
  
    public MiTextView(Context context, AttributeSet attrs) {  
        super(context, attrs);  ...