我有一个简单的数据库表,其中包含2列“_id”和“title”。 我在旋转器中显示数据,效果很好。
但是我需要在微调器列表顶部添加一个项目,该项目不是来自id = 0且title =“not specified”的数据库;
Spinner list = (Spinner) findViewById(R.id.spinner);
Cursor cursor = database.getAll(); // returns cursor with objects
String[] columns = new String[] {"title"};
int[] to = new int[] {R.id.title};
list.setAdapter(new SimpleCursorAdapter(this, R.layout.object_item_simple, cursor, columns, to));
我需要知道数据库中所选的项目ID,我可以使用list.getSelectedItemId();
所以我不能使用ArrayAdapter而不是SimpleCursorAdapter,因为我认为没有一种方法可以为适配器上的每个项目设置id。 有没有办法做到这一点?
感谢。
答案 0 :(得分:2)
您可以使用您的ID和标题创建一个对象,并使用光标构建这些对象的列表。然后在该列表的顶部插入您的人工条目。
然后在此列表中构建适配器传递时。
或者你可以将一个虚拟值放入你的数据库,虽然这很奇怪,也许根据你的查询和数据不可能。 ArrayAdapter更明智
答案 1 :(得分:1)
SimpleCursorAdapter
此方法:
CursorLoader
和SimpleCursorAdapter
成语ContentProvider
数据我创建了想要作为静态MatrixCursor
private static final MatrixCursor PLATFORM_HEADER_CURSOR = new MatrixCursor(
//These are the names of the columns in my other cursor
new String[]{
DataContract.ReflashPackage._ID,
DataContract.ReflashPackage.COLUMN_PLATFORM
});
static {
PLATFORM_HEADER_CURSOR.addRow(new String[]{
"0",
"Select a Platform")
});
}
这是onLoadFinished
的实现,它将光标合并并将其传递给适配器。
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
switch (loader.getId()) {
case PLATFORM_CURSOR_LOADER_ID:
Cursor mergedCursor = addPlatformHeaderToCursor(data);
mPlatformAdapter.swapCursor(mergedCursor);
break;
}
}
@NonNull
private static Cursor addPlatformHeaderToCursor(Cursor platforms) {
Cursor[] cursorToMerge = new Cursor[2];
cursorToMerge[0] = PLATFORM_HEADER_CURSOR;
cursorToMerge[1] = platforms;
return new MergeCursor(cursorToMerge);
}
答案 2 :(得分:0)
我经常使用的一种技术是我将定义一个对象(例如EntryObject),它具有我需要从光标显示的变量。一旦我有了这个,我可以遍历游标并将信息放入那些EntryObjects并将它们放在ArrayList或数组中。
然后,您可以构建一个客户ArrayAdapter,它将与您的新对象一起使用,以根据需要提取尽可能多的数据,并以您希望的方式显示它。