Спиннер/выпадающее меню в 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
Ответить

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

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

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

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

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