ArrayAdapter / ListView не работает - PullRequest
2 голосов
/ 16 марта 2011

Я новое программирование с Android, и, делая мои первые заявления, у меня что-то не так со списками.Вот код:

Cursor c = db.rawQuery("SELECT nombre FROM contactos", null);

        ArrayList<String> listaArray = new ArrayList<String>();
        ListView listadoContactos = (ListView)findViewById(R.id.listViewListaContactos);

        if (c.moveToFirst())
        {
            do {
                listaArray.add(c.getString(0));
            } while(c.moveToNext());
        }

        //Creamos un adaptador y lo asignamos al ListView.
        ArrayAdapter<String> adaptadorLista = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listaArray);

        listadoContactos.setAdapter(adaptadorLista);

Когда я вижу результат, мой список показывает только первый элемент в БД, который я запрашиваю.Не могли бы вы мне помочь, пожалуйста?

Спасибо за совет!Джордж.

PS: "nombre" - это столбец 0. Вот почему я пишу "getString (0)", потому что я просто хочу показать 1 столбец каждой строки.

Ответы [ 3 ]

0 голосов
/ 16 марта 2011

Попробуйте использовать SimpleCursorAdapter

// NOTE your query result should have id-field, named "_id"
    Cursor c = db.rawQuery("SELECT nombre, nombre_id as _id FROM contactos", null);

    SimpleCursorAdapter adaptorLista = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, c, new String[]{"nombre"}, new int[]{android.R.id.text1} );
            listadoContactos.setAdapter(adaptadorLista);

Здесь android.R.layout.simple_list_item_1 - расположение каждой строки в ListView, new String[]{"nombre"} имена полей в курсоре, значения которых установлены в TextViews в строке ListView. Идентификаторы TextView, указанные в последнем аргументе new int[]{android.R.id.text1}

0 голосов
/ 16 марта 2011

Используйте CursorAdapter вместо ArrayListAdapter. Вы делаете дополнительную работу для себя, копируя курсор в массив, просто чтобы передать его в ListView. Вот учебник по CursorAdapters

0 голосов
/ 16 марта 2011

Вы можете использовать SimpleCursorAdapter и передать ему курсор напрямую:

Adapter adapter = new SimpleCursorAdapter(
    this,
    c,
    android.R.layout.simple_list_item_1,
    new String[] { "nombre" },
    new int[] { android.R.id.text1 },
    0);
listadoContactos.setAdapter(adapter);

и тогда вам не нужно переходить и составлять список самостоятельно.

...