Android 如何将项目添加到SimpleCursorAdapter?
我有一个简单的数据库表,有两列“\u id”和“title”。 我在微调器中显示数据,效果很好 但我需要在微调器列表顶部添加一个项目,该项目不是来自id=0且title=“not specified”的数据库 我需要从数据库中知道所选项目的id,我可以使用Android 如何将项目添加到SimpleCursorAdapter?,android,simplecursoradapter,Android,Simplecursoradapter,我有一个简单的数据库表,有两列“\u id”和“title”。 我在微调器中显示数据,效果很好 但我需要在微调器列表顶部添加一个项目,该项目不是来自id=0且title=“not specified”的数据库 我需要从数据库中知道所选项目的id,我可以使用list.getSelectedItemId()来实现这一点 因此,我不能使用ArrayAdapter而不是SimpleCursorAdapter,因为我认为没有一种方法可以为适配器上的每个项设置id。 有办法做到这一点吗 谢谢。我经常使用的一
list.getSelectedItemId()来实现这一点代码>
因此,我不能使用ArrayAdapter而不是SimpleCursorAdapter,因为我认为没有一种方法可以为适配器上的每个项设置id。
有办法做到这一点吗
谢谢。我经常使用的一种技术是,我将定义一个对象(例如EntryObject),其中包含我需要从光标显示的变量。一旦我有了这些,我就可以遍历光标,将信息放入这些EntryObject中,并将它们放入ArrayList或数组中
然后,您可以构建一个customer ArrayAdapter,它将与您的新对象配合使用,以获取所需的数据并按您的意愿显示。您可以使用id和标题创建一个对象,并使用光标构建这些对象的列表。然后在列表的顶部插入您的人工条目
然后,当您构建此列表中的适配器过程时
或者,您可以将一个虚拟值放入数据库,尽管这会很奇怪,而且可能不可能,这取决于您的查询和数据。ArrayAdapter更加合理如何使用SimpleCorsorAdapter来实现这一点
此方法:
- 效率高
- 使用标准的
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);
}
@覆盖
public void onLoadFinished(加载器、光标数据){
开关(loader.getId()){
案例平台\u光标\u加载器\u ID:
游标mergedCursor=addPlatformHeaderToCursor(数据);
mPlatformAdapter.swapCursor(mergedCursor);
打破
}
}
@非空
专用静态游标addPlatformHeaderTocusor(游标平台){
Cursor[]cursorToMerge=新光标[2];
cursorToMerge[0]=平台头光标;
cursorToMerge[1]=平台;
返回新的合并游标(cursorToMerge);
}
@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);
}