TL; DR: Невозможно надежно подключить прослушиватель прокрутки любого типа для получения положения прокрутки DropdownMenu в реальном времени.
Код: Выделить всё
@Composable
@OptIn(ExperimentalMaterialApi::class)
private fun DropDownTextField(
selectedItem: Configuration?,
items: List?,
label: String,
onItemSelected: (Configuration) -> Unit,
) {
var isDropdownExpanded by remember {
mutableStateOf(false)
}
ExposedDropdownMenuBox(expanded = isDropdownExpanded, onExpandedChange = {
isDropdownExpanded = !isDropdownExpanded
}) {
OutlinedTextField(
modifier = Modifier.fillMaxWidth(),
textStyle = TextStyle.Default.copy(),
value = selectedItem?.title ?: "",
readOnly = true,
onValueChange = {},
label = {
Text(text = label)
},
trailingIcon = {
ExposedDropdownMenuDefaults.TrailingIcon(
expanded = isLanguageDropdownExpanded,
)
},
keyboardOptions = KeyboardOptions(capitalization = KeyboardCapitalization.Words),
)
DropdownMenu(
expanded = isLanguageDropdownExpanded,
onDismissRequest = {
isLanguageDropdownExpanded = false
},
modifier = Modifier.background(color = Color.White).heightIn(min = 240.dp)
.exposedDropdownSize(true),
) {
items?.forEach { item ->
DropdownMenuItem(onClick = {
onItemSelected(item)
isDropdownExpanded = false
}) {
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(16.dp),
) {
Text(text = item.title, color = LightTextGary)
if (selectedItem?.id == item.id) {
Icon(
painter = painterResource(id = R.drawable.ic_don),
ontentDescription = "selected",
)
}
}
}
}
}
}
}
Что еще хуже - «традиционные» решения, такие как добавление прослушивателей .scrollable() или .draggable() к модификатору, чтобы по крайней мере, обратите внимание, что позиция прокрутки не работает. Как это было бы в простом Box() или Column() - потому что (я думаю) фактический Column() реализован компонентом уже есть функция .verticalScroll(), используемая его модификатором внутри.
Таким образом, реализуя мой собственный прослушиватель прокрутки выше, он ИЛИ ничего не делает, Или выдает мусор, Или переопределяет прокрутку меню все вместе.
Что я здесь делаю не так? Чего мне не хватает?
Я пробовал использовать подобные решения для LazyColumn(), но пока я могу подключить любой надежный прослушиватель прокрутки, я не могу добиться прогресса любое другое решение
Подробнее здесь: https://stackoverflow.com/questions/762 ... ck-compose