Android旋转器默认值使用游标适配器



我在应用程序中使用了一个spinnerbox。spinnerbox将由数据库中的项目填充。这本身已经起作用了。但是我需要在下拉列表中添加一个额外的项目。我希望第一个项目是"一般"一般不是一个项目。因此,它不会从数据库中检索。有没有办法将它注入游标或适配器中?

对我来说有效的是在sql查询中做一个UNION。

dbStatic.rawQuery(
    " SELECT 2 as deftop, typeid as _id, typename as label FROM objtypes UNION "+
    " SELECT 1 as deftop, -1 as _id, "+strDefaultSpinner+" as label "+
    " ORDER BY deftop asc, label ", null
);

如果选择的项为-1,则为默认值。否则就是表中的一条记录

我遇到了同样的问题。问题是,你不能实际上插入信息到游标(因为它只是一个指针),所以我相信你必须有某种中介之间…我解决它的方法是简单地创建一个字符串数组[cursor.getCount+1]然后在[0]中插入"general",然后通过光标插入剩余的…

它确实会通过一个额外的轮(这在我的情况下不是很糟糕),但对于一个长列表,你可能想要覆盖适配器,并插入一行之前,它通过光标,我不能帮助你的代码..

我设法以不同的方式解决这个问题,然后我原来的计划。但是效果很好。而不是一般的选择。我做了一个复选框。如果选中,则为常规,并设置旋转器。如果未选中,则设置为启用。

我的例子是使用androidx, room和spinner组件。

在你的内容提供程序中,你应该有这样的内容。

    @Nullable
    @Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection,
                        @Nullable String[] selectionArgs, @Nullable String sortOrder) {
            ...
               String all = context.getResources().getString(R.string.search_spinner_all);
                SimpleSQLiteQuery query = new SimpleSQLiteQuery("SELECT '"+all+"' as "+ThemeData.COLUMN_ID+",'' as "+ThemeData.COLUMN_SET_COUNT+",0 as "+ThemeData.COLUMN_SUBTHEME_COUNT
                        +",0 as "+ThemeData.COLUMN_YEAR_FROM+",0 as "+ThemeData.COLUMN_YEAR_TO
                        +" UNION SELECT * FROM " + ThemeData.TABLE_NAME+" ORDER BY "+ ThemeData.COLUMN_ID);
                cursor = themeDataDao.selectAll(query);
        ...
}

在你的dao中使用

@RawQuery

@Dao
public interface ThemeDataDao {
    @RawQuery
    Cursor selectAll(SupportSQLiteQuery query);
}

你明白了,你可以使用你的简单实现或光标适配器!

    themesAdapter = new SimpleCursorAdapter(getContext(), R.layout.spinner_with_count, null,
                new String[]{ThemeData.COLUMN_ID, ThemeData.COLUMN_SET_COUNT}, new int[] { R.id.spinnerTxLabel, R.id.spinnerTxCount }, 0);
        inputTheme.setAdapter(themesAdapter);
LoaderManager.getInstance(this).initLoader(LOADER_THEMES, null, themesLoaderCallback);

最新更新