drop-down-menu - DropDownMenuItem 在 Android jetpack compose 中无法正常工作

标签 drop-down-menu android-jetpack-compose

我想在我的应用程序中显示一个下拉列表项,但它不起作用。它显示错误没有为参数“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/

相关文章:

Javascript 下拉导航 - 缩小未选择的选项

delphi - TButton 的下拉菜单

select - Tapestry:下拉组件的默认值

android - Jetpack compose AppBarIcon 提示 "Functions which invoke @Composable functions must be marked with the @Composable"

android-jetpack-compose - 该函数如何跟踪点击次数?

android - 在 Jetpack Compose 中单击时如何禁用涟漪效应

html - 导航栏高度自动不适用于移动 View 中的下拉菜单

css - 添加 CSS 插入符号后,HTML 子菜单在悬停时消失

android - Jetpack Compose 中的 App/Scaffold 白色背景更改问题

android - Jetpack 撰写 : How to disable FloatingAction Button?