2010-02-09 10 views
5

Leí un tutorial, y usa SQLlite y "SimpleCursorAdapter" para completar la lista con elementos. Este es el código que el tutorial me enseñó.¿Cómo llene un ListView (en Android) con datos XML o JSON?

private void fillData() { 
     // Get all of the notes from the database and create the item list 
     Cursor c = mDbHelper.fetchAllNotes(); 
     startManagingCursor(c); 

     String[] from = new String[] { NotesDbAdapter.KEY_TITLE }; 
     int[] to = new int[] { R.id.text1 }; 

     // Now create an array adapter and set it to display using our row 
     SimpleCursorAdapter notes = 
      new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to); 
     setListAdapter(notes); 
    } 

Sin embargo ... ¿y si quiero llenarlo con datos XML? ¿Es el mismo método? ¿Puede alguien darme un ejemplo (en código)? Gracias.

Respuesta

8

El ejemplo es el uso de un método CursorAdapter porque un objeto Cursor es devuelto por el NotesDbAdapter (si recuerdo bien) fetchAllNotes. No sé si hay una forma de pasar XML sin formato para crear una lista, pero puede usar pares de nombre/valor en HashMap para crear una lista usando SimplelistAdapter.

Puede analizar su xml y/o json y compilar una tabla hash con ella y usarla para completar una lista. El siguiente ejemplo no utiliza xml, de hecho no es dinámico en absoluto, pero sí muestra cómo armar una lista en tiempo de ejecución. Se toma del método onCreate de una actividad que se extiende ListActivity. Todos los valores en mayúscula son cadenas constantes estáticas definidas en la parte superior de la clase y se utilizan como claves.

// -- container for all of our list items 
List<Map<String, String>> groupData = new ArrayList<Map<String, String>>(); 

// -- list item hash re-used 
Map<String, String> group; 

// -- create record 
group = new HashMap<String, String>(); 

group.put(KEY_LABEL, getString(R.string.option_create)); 
group.put(KEY_HELP, getString(R.string.option_create_help)); 
group.put(KEY_ACTION, ACTION_CREATE_RECORD); 

groupData.add(group); 

// -- geo locate 
group = new HashMap<String, String>(); 

group.put(KEY_LABEL, getString(R.string.option_geo_locate)); 
group.put(KEY_HELP, getString(R.string.option_geo_locate_help)) 
group.put(KEY_ACTION, ACTION_GEO_LOCATE); 

groupData.add(group); 

// -- take photo 
group = new HashMap<String, String>(); 

group.put(KEY_LABEL, getString(R.string.option_take_photo)); 
group.put(KEY_HELP, getString(R.string.option_take_photo_help)); 
group.put(KEY_ACTION, ACTION_TAKE_PHOTO); 

groupData.add(group); 

// -- create an adapter, takes care of binding hash objects in our list to actual row views 
SimpleAdapter adapter = new SimpleAdapter(this, groupData, android.R.layout.simple_list_item_2, 
                new String[] { KEY_LABEL, KEY_HELP }, 
                new int[]{ android.R.id.text1, android.R.id.text2 }); 
setListAdapter(adapter); 
Cuestiones relacionadas