我想在我的应用程序中显示一个下拉列表项,但它不起作用。它显示错误没有为参数“text”传递值。我检查了 DropdownMenuItem()
函数,它显示了以下参数:
@Composable
@ComposableInferredTarget
public fun DropdownMenuItem(
text: @Composable () -> Unit,
onClick: () -> Unit,
modifier: Modifier,
leadingIcon: @Composable() (() -> Unit)?,
trailingIcon: @Composable() (() -> Unit)?,
enabled: Boolean,
colors: MenuItemColors,
contentPadding: PaddingValues,
interactionSource: MutableInteractionSource
): Unit
我的代码是:
@Composable
fun dropDownMenu() {
var expanded by remember { mutableStateOf(false) }
val suggestions = listOf("Kotlin", "Java", "Dart", "Python")
var selectedText by remember { mutableStateOf("") }
var textfieldSize by remember { mutableStateOf(Size.Zero)}
val icon = if (expanded)
Icons.Filled.KeyboardArrowUp
else
Icons.Filled.KeyboardArrowDown
Column(Modifier.padding(20.dp)) {
OutlinedTextField(
value = selectedText,
onValueChange = { selectedText = it },
modifier = Modifier
.fillMaxWidth()
.onGloballyPositioned { coordinates ->
//This value is used to assign to the DropDown the same width
textfieldSize = coordinates.size.toSize()
},
label = {Text("Label")},
trailingIcon = {
Icon(icon,"contentDescription",
Modifier.clickable { expanded = !expanded })
}
)
DropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false },
modifier = Modifier
.width(with(LocalDensity.current){textfieldSize.width.toDp()})
) {
suggestions.forEach { label ->
DropdownMenuItem(onClick = {
selectedText = label
expanded = false
}) {
Text(text = label)
}
}
}
}
}
我尝试通过以下代码解决问题:
DropdownMenuItem(text = {label}, onClick = {
selectedText = label
expanded = false
})
它会弹出一个空白窗口,不显示任何项目列表,但该项目是可单击的。当我单击空白窗口时,它会在字段上写入该项目。
按下下拉图标时如何显示我的项目?
最佳答案
您必须结合两种方法。 text
不是 DropdownMenuItem
的最后一个参数,因此您不能使用尾随 lambda 语法。 text = {label}
可以编译,但是 text
是 @Composable () -> Unit
,所以只需传递 label
> 不会显示任何内容。你要做的是:
DropdownMenuItem(
text = { Text(text = label) },
...
)
关于drop-down-menu - DropDownMenuItem 在 Android jetpack compose 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76554278/