ArrayAdapter / ListView不起作用

时间:2011-03-16 19:55:45

标签: android listview cursor android-arrayadapter

我是使用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 :(得分:0)

您可以使用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);

然后您不必单步执行并自行构建列表。

答案 1 :(得分:0)

尝试使用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"}游标中字段的名称,其值设置为ListView行中的TextViews。在最后一个参数new int[]{android.R.id.text1}

中指定的TextView ID

答案 2 :(得分:0)

使用CursorAdapter而不是ArrayListAdapter。您可以通过将光标复制到数组中来将其提供给ListView,从而为自己做额外的工作。 Here is a tutorial on CursorAdapters