Получение списка запросов из комнаты для заполнения DropDownMenuAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Получение списка запросов из комнаты для заполнения DropDownMenu

Сообщение Anonymous »

Создание базы данных с несколькими таблицами. Таблицы используются для отслеживания использования компонентов, но мне трудно получить список запросов для заполнения в DropDownMenu. Я хочу ограничить пользователей списком, чтобы мой внешний ключ работал проще. Когда у меня есть вывод Log.d, каким должен быть список, он всегда выводит пустой список []. Надеюсь, приведенного ниже кода будет достаточно, чтобы показать мою проблему.
Дао:
@Query("SELECT bulletName FROM Bullet")
fun getBulletNames(): Flow

классы данных:
data class BulletNames(
val bulletName: String,
)

data class AmmoState(
val bulletName: List = emptyList(),
)

Событие:
sealed interface AmmoEvent {
data object ShowDialog : AmmoEvent
}

ViewModel:
@OptIn(ExperimentalCoroutinesApi::class)
class AmmoViewModel(
private val dao: BBDao,
) : ViewModel() {
private val _ammoSortType = MutableStateFlow(AmmoSortType.AMMO_NAME)
private val _ammo = _ammoSortType
.flatMapLatest { sortType ->
when (sortType) {
AmmoSortType.AMMO_NAME -> dao.getAmmoOrderedByNameASC()
AmmoSortType.AMMO_QUANTITY -> dao.getAmmoOrderedByQuantityASC()
}
}
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), emptyList())

private val _state = MutableStateFlow(AmmoState())
val state = combine(_state, _ammoSortType, _ammo) { state, sortType, ammo ->
state.copy(
ammo = ammo,
sortType = sortType,
)
}.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), AmmoState())

fun onEvent(event: AmmoEvent) {
when (event) {
AmmoEvent.ShowDialog -> {
_state.update {
it.copy(
isAddingAmmo = true,
ammoBulletName = "",
)
}
viewModelScope.launch {
dao.getBulletNames()
//Log.d("list", _bulletOptions.toString())
}
}
}
}
}

Диалоговое окно:
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun AddAmmoDialog(
state: AmmoState,
onEvent: (AmmoEvent) -> Unit,
modifier: Modifier = Modifier,
) {
var expanded by remember { mutableStateOf(false) }
val bulletOptions = state.bulletName
var selectedBullet = ""

Log.d("List", bulletOptions.toString())

AlertDialog(
modifier = modifier,
onDismissRequest = { onEvent(AmmoEvent.HideDialog) },
confirmButton = {
Box(
modifier = Modifier.fillMaxWidth(),
contentAlignment = Alignment.CenterEnd
) {
Button(onClick = {
onEvent(AmmoEvent.SaveAmmo)
}) {
Text(text = "Save")
}
}
},
title = { Text(text = "Add Ammo") },
text = {
Column(
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
OutlinedTextField(
value = state.ammoName,
onValueChange = {
onEvent(AmmoEvent.SetAmmoName(it))
},
placeholder = { Text(text = "Ammo Name") },
label = { Text(text = "Ammo Name") },
)

ExposedDropdownMenuBox(
expanded = expanded,
onExpandedChange = { expanded = !expanded },
modifier = modifier,
) {
OutlinedTextField(
value = selectedBullet,
onValueChange = {},
label = { Text(text = "Select Bullet") },
trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) },
modifier = Modifier
.menuAnchor()
.fillMaxWidth()
)
ExposedDropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false }
) {
bulletOptions.forEach { item ->
DropdownMenuItem(
text = { Text(text = item.toString()) },
onClick = {
expanded = false
selectedBullet = item.toString()
onEvent(AmmoEvent.SetAmmoBulletName(item.toString()))
},
)
}
}
}
}
}
)
}


Подробнее здесь: https://stackoverflow.com/questions/788 ... opdownmenu
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»