Android 如何将项目添加到SimpleCursorAdapter?

Android 如何将项目添加到SimpleCursorAdapter?,android,simplecursoradapter,Android,Simplecursoradapter,我有一个简单的数据库表,有两列“\u id”和“title”。 我在微调器中显示数据,效果很好 但我需要在微调器列表顶部添加一个项目,该项目不是来自id=0且title=“not specified”的数据库 我需要从数据库中知道所选项目的id,我可以使用list.getSelectedItemId()来实现这一点 因此,我不能使用ArrayAdapter而不是SimpleCursorAdapter,因为我认为没有一种方法可以为适配器上的每个项设置id。 有办法做到这一点吗 谢谢。我经常使用的一

我有一个简单的数据库表,有两列“\u id”和“title”。 我在微调器中显示数据,效果很好

但我需要在微调器列表顶部添加一个项目,该项目不是来自id=0且title=“not specified”的数据库

我需要从数据库中知道所选项目的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);
}