Siguiendo con el ejemplo de parsear un documento xml, aplicación XMLParser, una vez que hemos establecido la conexión web, obtenido el texto xml a parsear y extraído los nodos en los que estamos interesado, el siguiente paso es mostrar al usuario de una manera amigable los datos. Para ello usamos un ListView.
- Creamos la clase Adaptador_xml la cual extiende a ArrayAdapter. En ella definimos el layout asociado y los datos que en él se insertarán (nombre, cantidad, precio e imagen asociada en función de la temporada del producto).
package com.example.xmlparser; import android.app.Activity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; public class Adaptador_xml extends ArrayAdapter<String> { Activity context; private final String[] datos; public Adaptador_xml(Activity context, String[] datos) { super(context, R.layout.listado_annexo, datos); this.context = context; this.datos = datos; } public View getView(int position, View convertView, ViewGroup parent) { // Añadimos el xml "listado_annexo" al que estamos trabajando LayoutInflater inflater = context.getLayoutInflater(); View item = inflater.inflate(R.layout.listado_annexo, null); // Recogemos los datos seleccionados por el usuario String s = datos[position]; String[] datosindividuales = s.split("-"); TextView TituloProducto = (TextView) item .findViewById(R.id.TituloProducto); TituloProducto.setText(datosindividuales[1]); TextView SubTituloCantidad = (TextView) item .findViewById(R.id.SubTituloCantidad); SubTituloCantidad.setText(datosindividuales[2] + " unidades"); TextView SubTituloPrecio = (TextView) item .findViewById(R.id.SubTituloPrecio); SubTituloPrecio.setText(datosindividuales[3] + " euros"); // Definimos la imagen a mostrar en función de la temporada del producto ImageView imageView = (ImageView) item.findViewById(R.id.icono); if (s.endsWith("verano")) { imageView.setImageResource(R.drawable.verano); } else if (s.endsWith("invierno")) { imageView.setImageResource(R.drawable.invierno); } else { imageView.setImageResource(R.drawable.vacio); } return (item); } }
- En la clase Resultado_parsear creamos una instancia del ListView y añadimos los datos parseados.
if (consulta[0] != "0-0-0-0-0") { android.util.Log.v("Parser XML", "Hay datos en el nodo"); // Creamos una instancia del listView del xml final ListView list = (ListView) findViewById(R.id.ListadoProductos); // Damos forma a los elmentos que aparecerán en nuestro listado // con la clase Adaptador_xml Adaptador_xml adap_xml = new Adaptador_xml(this, consulta); list.setAdapter(adap_xml); } else { android.util.Log.v("PARSEAR", "NO hay datos en el nodo"); Cadenaresultado.setText("No hay datos a mostrar"); }