我正在尝试从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
答案 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不知道你的物品,所以他不能用它做任何事情。