2010-02-09 15 views
5

J'ai lu un tutoriel, et il utilise SQLlite et "SimpleCursorAdapter" pour remplir la liste avec des éléments. C'est le code que le tutoriel m'a appris.Comment remplir un ListView (sous Android) avec des données XML ou 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); 
    } 

Cependant ... que faire si je veux le remplir avec des données XML? Est-ce la même méthode? Quelqu'un peut-il me donner un exemple (en code)? Merci.

Répondre

8

L'exemple utilise un CursorAdapter car un objet Cursor est renvoyé par la méthode (si je me souviens bien) fetchAllNotes. Je ne sais pas s'il existe un moyen de passer en XML brut pour créer une liste mais vous pouvez utiliser des paires nom/valeur dans un HashMap pour créer une liste en utilisant le SimplelistAdapter.

Vous pouvez analyser votre fichier xml et ou json et créer une table de hachage avec celui-ci et l'utiliser pour remplir une liste. L'exemple suivant n'utilise pas xml, en fait ce n'est pas du tout dynamique, mais il montre comment assembler une liste à l'exécution. Il est pris de la méthode onCreate d'une activité qui s'étend ListActivity. Les valeurs en majuscules sont des chaînes constantes statiques définies en haut de la classe et sont utilisées comme clés.

// -- 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);