tema 5 ejemplo_lista_compra
DESCRIPTION
Ejemplo Lista de la compraTRANSCRIPT
Análisis y Diseño de Software
Departamento de Ingeniería de Sistemas Telemáticoshttp://moodle.dit.upm.es
Carlos A. Iglesias <[email protected]>
EjemploListaCompra
Ejemplo Lista de la Compra 2
Teoría
Ejercicio práctico en el ordenador
Ampliación de conocimientos
Lectura / Vídeo / Podcast
Práctica libre / Experimentación
Leyenda
Ejemplo Lista de la Compra 3
Objetivos
● Aplicar los conceptos aprendidos en una aplicación de ejemplo: una lista de la compra
● Repaso– Patrones Singleton / DAO– AsyncTask– Intenciones para pasar de una actividad a otra
Ejemplo Lista de la Compra 4
¿Qué vamos a hacer?
Ejemplo Lista de la Compra 5
Arquitectura
Ejemplo Lista de la Compra 6
Producto
...Genero (y reviso getters/setters, constructor, equals(), toString()
Ejemplo Lista de la Compra 7
RepasoPatrón de Diseño Singleton
● Una clase que tiene sólo un objeto
Ejemplo Lista de la Compra 8
RepasoPatrón de Diseño DAO
● DAO (Data Access Object)
● Un DAO contiene una conexión a una base de datos y sus operaciones básicas, ocultando su implementación
● En nuestro caso, StatusData sigue el patrón DAO del valor Status de Twitter
Ejemplo Lista de la Compra 9
En nuestro problema...
● Queremos tener sólo una lista... (singleton)
● Pero realmente queremos un DAO, si siguiéramos con la aplicación, tendríamos una base de datos de productos
● Vamos a seguir el patrón singleton, de forma que esta clase sea la responsable de devolvernos la lista, y de actualizarla
Ejemplo Lista de la Compra 10
ListaSingleton
Ejemplo Lista de la Compra 11
DetalleProductoActivity
Programo clases privadas MiButtonSaveOnClickListener y MiButtonCancelOnClickListener que implementan View.OnClickLiistener, ahora mismo no hace nada.
Ejemplo Lista de la Compra 12
RepasoCrear Lista Opciones
ListView para ver una lista@android:id/list → layout
de Android para listas
@android:id/empty → si la lista está vacía
Ejemplo Lista de la Compra 13
RepasoCrear Lista opciones
ListActivity en vez de Activity
Fuente de datos
Adaptador de lista, simple_list_item_1
está predefinido
Listener de la selección
Ejemplo Lista de la Compra 14
ListaCompraActivity
http://developer.android.com/reference/android/widget/ArrayAdapter.html
Conmuto a otra actividad
Ejemplo Lista de la Compra 15
Ejecutamos...
Ejemplo Lista de la Compra 16
Rellenamos...
Ejemplo Lista de la Compra 17
Probamos...
Ejemplo Lista de la Compra 18
Análisis...
● Ha funcionado que desde ListaCompraActivity la intención me lleva a DetalleProductoActivity...
● Tenemos ahora que procesar esa intención para rellenar los campos
Ejemplo Lista de la Compra 19
DetalleProductoActivity (I)
Ejemplo Lista de la Compra 20
DetalleProductoActivity (II)
Ejemplo Lista de la Compra 21
Pruebo...
¡No cambia :(!
Ejemplo Lista de la Compra 22
Repaso Ciclo vida de Actividad
http://developer.android.com/reference/android/app/Activity.html
Ejemplo Lista de la Compra 23
RepasoEstados de actividad
● onCreate(Bundle saveInstanceState) - al crearse
● onStart() - justo antes de que sea visible● onResume() - es visible y 'se reactiva'● onPause() - otra actividad va a tomar el
foco y ésta va a ser pausada
● onStop() - no es visible, está parada● onDestroy() - se va a destruir
Ejemplo Lista de la Compra 24
ListaCompraActivity
Ejemplo Lista de la Compra 25
Pruebo...
¡Cambia :)!
Ejemplo Lista de la Compra 26
Nueva funcionalidad
● Vamos a cargar las ofertas del día– Se conecta a varias
webs y tarda en analizar las páginas HTML (lo simulamos)
● Y ordenar alfabéticamente
Ejemplo Lista de la Compra 27
Usando AsyncTask
● Usar las hebras directamente es tedioso
● Android proporciona AsyncTask– Permite crear una hebra de fondo que publica
en la hebra UI sin tener que programar Threads o Handlers
– Definimos una tarea 'asíncrona' que se ejecuta de fondo y publica sus resultados en la hebra UI
Ejemplo Lista de la Compra 28
AsyncTask – Uso básico● Hebras: UI Thread (UITh) y Background Thread
(BGTh, la AsyncTask) ●Tipos genéricos: Params, Progress, Result● Estados principales
– onPreExecute (UITh)– doInBackground (BGTh)– onProgressUpdate(UITh)– onPostExecutre(UITh)
● Método auxiliar– publishProgress (BGTh)
Ejemplo Lista de la Compra 29
AsyncTask
● Una AsyncTask tiene 3 tipos genéricos● AsyncTask<Params, Progress, Result>
– Params – tipo de parámetros enviados a la tarea para su ejecución
– Progress – tipo de las unidades de progreso publicadas durante su ejecución
– Result – resultado de la ejecución de la tarea
● Si no usamos un tipo, lo ponemos Void (con V)
Ejemplo Lista de la Compra 30
Métodos de AsyncTask● onPreExecute(): invocado por
UIth justo tras ejecutar la tarea● doInBackground(Params) –
invocado por BGTh justo tras onPreExecute
● onProgressUpdate(Progress) – invocado por UITh tras una llamada de BGTh a publishProgress(Progress)
● onPostExecute(Result) invocado por UITh justo tras terminar BGTh
Ejemplo Lista de la Compra 31
AsyncTask
● Puedo saber si está en funcionamiento con el método getStatus()
Ejemplo Lista de la Compra 32
ListCompraActivity
… métodos
Ejemplo Lista de la Compra 33
ActualizaCompraTask
Ejemplo Lista de la Compra 34
ActualizaCompraTask (I)
Ejemplo Lista de la Compra 35
ActualizaCompraTask (II)
Ejemplo Lista de la Compra 36
Análisis...
● Carga varias veces los mismos productos...
● Permite conmutar al detalle aunque hayamos lanzado la tarea (no es necesariamente malo)