Спиннер/выпадающее меню в Jetpack ComposeAndroid

Форум для тех, кто программирует под Android
Anonymous
Спиннер/выпадающее меню в Jetpack Compose

Сообщение Anonymous »

Пытаемся создать раскрывающееся меню, содержащее не менее 50 элементов, используя приведенный ниже код создания:

Код: Выделить всё

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun Spinner(label: String, options: List) {
var expanded by remember { mutableStateOf(false) }
var text by remember { mutableStateOf(options[0]) }

ExposedDropdownMenuBox(
expanded = expanded,
onExpandedChange = { expanded = it },
) {
TextField(
// The `menuAnchor` modifier must be passed to the text field to handle
// expanding/collapsing the menu on click. A read-only text field has
// the anchor type `PrimaryNotEditable`.
modifier = Modifier.menuAnchor(),
value = text,
onValueChange = {},
readOnly = true,
singleLine = true,
label = { Text(label) },
trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) },
colors = ExposedDropdownMenuDefaults.textFieldColors(),
)
ExposedDropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false },
) {
options.forEach { option ->
DropdownMenuItem(
text = { Text(option, style = MaterialTheme.typography.bodyLarge) },
onClick = {
text = option
expanded = false
},
contentPadding = ExposedDropdownMenuDefaults.ItemContentPadding,
)

}
}
}
Код работает правильно, но имеет заметную задержку по сравнению с эквивалентом View. Кроме того, меню не закрывается при нажатии на завершающий значок.
Как оптимизировать код, чтобы добиться производительности, сравнимой со счетчиком просмотра, и обеспечить закрытие меню при нажатии на завершающий значок? ?

Подробнее здесь: https://stackoverflow.com/questions/785 ... ck-compose

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