在Android中加载ListView适配器

时间:2014-11-19 14:53:55

标签: android sqlite listview

我正在尝试从SQLite数据库加载Adapter,而我似乎无法理解其工作原理。我对Android和Java编程非常陌生,所以如果我偶然发现一些显而易见的事情,请原谅。

我明白要有一个"正确的"数据库设置我必须有3个java文件,Main,DatabaseHandler和我的表所用的类,所以到那里。我有大部分工作在某种形式,但我似乎无法让我的ListView加载我的表中的行。

我只有一个包含两列的表,ID和Item。获取所有项目的DatabaseHandler中的代码如下所示:

public List<Item> getAllItems()
{
    List<Item> itemList = new ArrayList<Item>();
    String selectQuery = "SELECT * FROM " + TABLE_ITEMS;
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    if (cursor.moveToFirst())
    {
        do {
            Item item = new Item();
            item.setID(Integer.parseInt(cursor.getString(0)));
            item.setItem(cursor.getString(1));
            itemList.add(item);
        } while (cursor.moveToNext());
    }
    return itemList;
}

如何将其放入主要活动中的ListView Adapter?这就是我在下面尝试的并且它不起作用我改为获得指针位置:

    List itemArray = db.getAllItems();
    //Define a new Adapter
    ArrayAdapter<List> adapter = new ArrayAdapter<List>(this,
            android.R.layout.simple_list_item_1, android.R.id.text1, itemArray);

    //Bind the adapter to the listView
    itemView.setAdapter(adapter);

如何加载项目?

感谢您给予的任何帮助。

Socaprice

3 个答案:

答案 0 :(得分:2)

您可以在此处使用SimpleCursorAdapter。你不必自己解析任何东西而且你不需要自定义适配器。

首先调整数据库方法以返回Cursor

public Cursor getData() {
    String selectQuery = "SELECT * FROM " + TABLE_ITEMS;
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    return cursor;
}

接下来创建并设置SimpleCursorAdapter

Cursor cursor = db.getData();
String[] from = new String[] { "StringColumn" };
int[] to = new int[] { android.R.id.text1 };

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
        android.R.layout.simple_list_item_1, cursor, from, to, 0);

listView.setAdapter(adapter);

注意:将"StringColumn"更改为将使用的数据库列名称。

修改 您可以像这样获取列名称:

String itemColumn = cursor.getColumnName(1);

然后将其用于SimpleCursorAdapter

String[] from = new String[] { itemColumn };

答案 1 :(得分:0)

除非您使用简单的String数组,否则您必须实现自己的ArrayAdapter及其getView()方法的修改,以便在AdapterView中实际使用它

This是一个很好的起点。

但是为了给你一个粗略的想法(并且由于我没有理由通过仅提供链接回答SO问题),你的ArrayAdapter将会这样工作:

  • XML项目制作ListView版面。这可以是简单的TextView或复杂的View
  • List<Item>传递给适配器并将其另存为全局变量(或字段)。
  • 覆盖ArrayAdapter的{​​{1}},将您在上面定义的XML布局中的getView() TextView与您{{1}的实际数据绑定在一起}。 Android会自动调用此方法,传递实际位置,以便您可以调用列表中的相关项目。

答案 2 :(得分:0)

您应该编写自己的ArrayAdapter。因为普通的ArrayAdapter不知道你的物品,所以他不能用它做任何事情。

请参阅Custom Array Adapter example / tutorial