@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. Кроме того, меню не закрывается при нажатии на завершающий значок.
Как оптимизировать код, чтобы добиться производительности, сравнимой со счетчиком просмотра, и обеспечить закрытие меню при нажатии на завершающий значок? ?
Пытаемся создать раскрывающееся меню, содержащее не менее 50 элементов, используя приведенный ниже код создания: [code]@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, )
} } } [/code]
Код работает правильно, но имеет заметную задержку по сравнению с эквивалентом View. Кроме того, меню не закрывается при нажатии на завершающий значок. Как оптимизировать код, чтобы добиться производительности, сравнимой со счетчиком просмотра, и обеспечить закрытие меню при нажатии на завершающий значок? ?