2010-02-09 6 views
5

Ich lese ein Tutorial, und es verwendet SQLlite und "SimpleCursorAdapter", um die Liste mit Elementen zu füllen. Dies ist der Code, den das Tutorial mir beigebracht hat.Wie fülle ich einen ListView (in Android) mit XML- oder JSON-Daten?

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

aber ... was ist, wenn ich möchte es Daten mit XML füllen? Ist es die gleiche Methode? Kann mir jemand ein Beispiel geben (in Code)? Vielen Dank.

Antwort

8

Das Beispiel verwendet eine CursorAdapter, weil ein Cursor Objekt von der NotesDbAdapter zurückgegeben wird (wenn ich mich richtig erinnere) fetchAllNotes Methode. Ich weiß nicht, ob es eine Möglichkeit gibt, Roh-XML zu übergeben, um eine Liste zu erstellen, aber Sie können Name/Wert-Paare in einer HashMap verwenden, um eine Liste mit dem SimpleListAdapter zu erstellen.

Sie können Ihre XML und/oder JSON analysieren und eine Hashtabelle damit erstellen und diese verwenden, um eine Liste aufzufüllen. Das folgende Beispiel verwendet kein XML, es ist überhaupt nicht dynamisch, zeigt aber, wie eine Liste zur Laufzeit zusammengestellt wird. Es stammt aus der onCreate Methode einer Aktivität, die ListActivity erstreckt. Die Werte für alle Großbuchstaben sind statische Konstanten, die am Anfang der Klasse definiert sind und als Schlüssel verwendet werden.

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