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