Как заполнить ListView (в Android) данными XML или JSON?
-
19-09-2019 - |
Вопрос
Я прочитал учебник, и он использует SQLlite и «SimpleCursorAdapter» для заполнения списка элементами.Это код, которому меня научил учебник.
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);
}
Однако... что, если я захочу заполнить его данными XML?Это тот же метод?Может ли кто-нибудь дать мне пример (в коде)?Спасибо.
Решение
В примере используется CursorAdapter
потому что Cursor
объект возвращается методом NotesDbAdapter
(если я правильно помню ) fetchAllNotes
метод.Я не знаю, есть ли способ передать необработанный XML для создания списка, но вы можете использовать пары имя/значение в HashMap
чтобы создать список с помощью SimplelistAdapter.
Вы можете проанализировать свой XML и/или JSON, построить с его помощью хеш-таблицу и использовать ее для заполнения списка.В следующем примере не используется XML, фактически он вообще не динамический, но демонстрирует, как собрать список во время выполнения.Это взято из onCreate
метод деятельности, который расширяет ListActivity
.Все значения в верхнем регистре представляют собой статические константные строки, определенные в верхней части класса, и используются в качестве ключей.
// -- 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 );