У меня проблемы с настройкой правильной работы счетчика с элементами, которые я извлек из базы данных SQLite. Я могу отобразить элементы в раскрывающемся списке, но не могу выбрать их. Если я заменил элементы (questAddViewModel.categorylist) на простой массив строк, тогда спиннер работает правильно. Я просто не могу понять, как заставить список, заполненный из базы данных, работать вместо этого.
Я использую комнату и Дао для вызова базы данных.
Обновление: Включены скриншоты для пояснения. Если я щелкну по любому элементу на втором изображении, экран просто вернется к первому изображению, и на счетчике ничего не появится. Если я пытаюсь присвоить selectedItem строке, как я делаю в закомментированном коде
//questCategorySelected = parent.getItemAtPosition(pos).toString()
Это скажет мне, что это ноль.
Снимок экрана со спиннером (Зеленая полоса)
Снимок экрана, на котором Spinner показывает выпадающий элемент
Вот мой код для счетчика во Фрагменте:
//Setup Spinner for Quest Category
val categorySpinnerAdapter = ArrayAdapter(application, android.R.layout.simple_spinner_item, questAddViewModel.categorylist) //
categorySpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
binding.addQuestCategory.adapter = categorySpinnerAdapter
binding.addQuestCategory.onItemSelectedListener = object : AdapterView.OnItemSelectedListener
{
override fun onItemSelected(parent: AdapterView<*>, view: View, pos: Int, id: Long) {
// An item was selected. You can retrieve the selected item using
// parent.getItemAtPosition(pos)
//questCategorySelected = parent.getItemAtPosition(pos).toString()
//Toast.makeText(application, "${parent.getItemAtPosition(pos).toString()} <-In Selected", Toast.LENGTH_LONG).show();
}
override fun onNothingSelected(parent: AdapterView<*>) {
// Another interface callback
}
}
Вот мой код в ViewModel
private val uiScope = CoroutineScope(Dispatchers.Main + viewModelJob)
val categorylist = ArrayList<String>()
init {
populateCategorySpinner()
}
fun populateCategorySpinner()
{
uiScope.launch {
populateCategorySpinnerList()
}
}
private suspend fun populateCategorySpinnerList()
{
withContext(Dispatchers.IO)
{
val categorylistcursor = database.getQuestCategoryCursor()
if (categorylistcursor.moveToFirst()) {
do {
val category =
categorylistcursor.getString(categorylistcursor.getColumnIndexOrThrow("quest_category_name"))
categorylist.add(category);
} while (categorylistcursor.moveToNext())
}
categorylistcursor.close();
}
}
Это то, что у меня есть в Дао
@Query ( "SELECT * FROM t_ql_quest_category")
fun getQuestCategoryCursor(): Cursor
Я ищу решение для получения списка, который я извлекаю из курсора базы данных, чтобы можно было правильно выбрать его в счетчике.