Как мне заполнить ListView (в Android) данными XML или JSON? - PullRequest
5 голосов
/ 09 февраля 2010

Я прочитал учебник, и он использует 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? Это тот же метод? Может кто-нибудь привести пример (в коде)? спасибо.

1 Ответ

8 голосов
/ 09 февраля 2010

В примере используется 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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...