android spinner使用游标适配器的默认值

时间:2011-11-21 13:38:46

标签: android spinner default

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

4 个答案:

答案 0 :(得分:2)

对我有用的是在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,那么它是默认值。否则它是表中的记录。

答案 1 :(得分:1)

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

它确实经过额外一轮的项目(在我的情况下并不是那么糟糕)但是对于一个长列表你可能想要覆盖adaptar并在它通过光标之前插入一行我无法帮助你用那个代码..

答案 2 :(得分:0)

我设法以不同的方式解决这个问题,然后我最初计划。但它运作良好。而不是一般选项。我做了一个复选框。是否检查,然后它的一般和微调器被设置为ununabled。如果未选中则将其设置为启用。这适用于我的情况。

答案 3 :(得分:0)

我的示例正在使用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);
        ...
}

在您的小岛上,使用

@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);