Está en la página 1de 3

DAM – Programación multimedia y dispositivos móviles – Visualización de un canal RSS en un ListView

Visualización de un canal RSS en un ListView


En esta práctica vamos a visualizar las noticias del canal RSS de la revista “Muy
Interesante” http://feeds.feedburner.com/Muyinteresantees?format=xml en un ListView,
dado un adaptador personalizado, utilizando un layout y un ArrayList de noticias, para que se
muestre de la siguiente manera:

Para almacenar la información de una noticia, se proporciona la clase NoticiaRSS. De un objeto


NoticiaRSS obtendremos la información que necesitaremos mediante sus métodos:
 getTitulo()  Devuelve el título de la noticia
 getFechaComoStringFormateado()  Devuelve la fecha de la noticia en el formato
“diasemana, dd de NombreMes del aaaa, hh:mm”
 getDescripcion()  Devuelve la descricipción de la noticia
 getUrlImagen()  URL de la imagen asociada a la noticia.

 getEnlace() Dirección Web de la noticia. La usaremos



para implementa el OnItemClickListener del ListView y visualizar en el navegador
Web la noticia.

Los cuatro primeros métodos, se utilizarán para visualizar la información de la noticia en cada
ítem del ListView, como siempre, lo haremos sobrescribiendo el método getView() de nuestro
adaptador personalizado:

Página 1 de 3
DAM – Programación multimedia y dispositivos móviles – Visualización de un canal RSS en un ListView

getTitulo()
getFechaComoStringFormateado()

* getUrlImagen()

getDescripcion()

Para descargar las noticias RSS, parsearlas y construir un ArrayList con dichas noticias,
en el evento OnCreate, se proporciona el código que crea un objeto de la clase
DescargaNoticiasRSS (subclase de AsyncTask), enviando como parámetro de su método
execute (método el encargado de iniciar la tarea) el canal RSS
http://feeds.feedburner.com/Muyinteresantees?format=xml y el nombre del canal. Al finalizar
la descarga, ejecutará automáticamente el método onRecibeNoticiasRSS, donde podrás
recoger la lista de noticias del canal RSS (ArrayList<NoticiaRSS> listaNoticias).

* Para visualizar la imagen en el ImageView a partir de un URL, tenemos que descargarla, y


dado que este también es un proceso con un tiempo de respuesta no inmediato, se realizará
en un nuevo hilo de ejecución mediante la clase proporcionada AsignaImagenDeURL,
subclase de AsyncTask (extends AsyncTask<String,Void,Void>). El constructor recibe el
ImageView y el contexto. El método execute, recibirá el URL de la imagen a descargar, una vez
finalizada la descarga automáticamente se asignará la imagen al ImageView. Ejemplo uso de la
tarea:

AsignaImagenDeURL tarea = new AsignaImagenDeURL(imageView1,contexto);


tarea.execute(“http://www.sitio.com/imagen.png”);

Página 2 de 3
DAM – Programación multimedia y dispositivos móviles – Visualización de un canal RSS en un ListView

Paso a Paso
1. Añade al layout principal del proyecto un ListView que ocupe toda la pantalla

2. Crea un layout XML personalizado para cada ítem/fila del ListView, siguiendo el
formato de la imagen:

getTitulo()
getFechaComoStringFormateado()

* getUrlImagen()

getDescripcion()

3. Implementa un adaptador propio (subclase de ArrayAdapter<NoticiaRSS>) para


mostrar en el método sobrescrito getView un ítem/fila del ListView con los datos de un
objeto NoticiaRSS del ArrayList<NoticiaRSS>), presentando dichos datos, usando los
métodos correspondientes, tal y como se indica en la imagen superior.

4. Modifica ahora el método getView del adaptador personalizado para que descargue y
visualice la imagen (usa el método getUrlImagen() de la noticia para obtener el URL
de la imagen).
Ejemplo uso de la tarea para descargar y visualizar una imagen dada el URL:
AsignaImagenDeURL tarea = new AsignaImagenDeURL(imageView1,contexto);
tarea.execute(“http://www.sitio.com/imagen.png”);

5. Realiza las optimizaciones pertinentes en el adaptador personalizado para ahorrar


memoria y CPU

6. Haz que el desplazamiento a lo largo del ListView, cancele Threads de descarga de


imágenes innecesarios ( tarea.cancel(true) ).

7. Implementa el clic sobre un item del ListView para que se visualice el enlace de la
noticia en el navegador Web.

Uri uri = Uri.parse(noticia.getEnlace());


Intent intencion = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intencion);

Página 3 de 3

También podría gustarte