【问题标题】:DropDownMenu not showing when click in compose在撰写中单击时,DropDownMenu 不显示
【发布时间】:2021-10-13 22:37:11
【问题描述】:

我有一张图片,我想在用户点击图片时显示一个 dropdownMenuItem。我正在调试应用程序,我可以看到代码通过 DropdownDemo 方法但没有显示任何内容。

关于我做的不好的一些建议。

提前致谢。

点击代码

@Composable
fun Header(currentItem: CartListItems) {
    var showDialog by remember { mutableStateOf(false) }

    Box(Modifier.fillMaxWidth()) {
        Text(modifier = Modifier.align(Alignment.TopStart),
            text = currentItem.type,
            color = colorResource(id = R.color.app_grey_dark),
            fontSize = 12.sp)
        Image(painter = painterResource(R.drawable.three_dots),
            contentDescription = "more options button",
            Modifier
                .align(Alignment.CenterEnd)
                .width(24.dp)
                .height(6.75.dp)
                .clickable(indication = null,
                    interactionSource = remember { MutableInteractionSource() },
                    onClick = {
                        showDialog = true
                    }))

        if(showDialog) {
            DropdownDemo()
            showDialog = false
        }
    }
}

下拉菜单:

@Composable
fun DropdownDemo() {
    var expanded by remember { mutableStateOf(false) }
    val items = listOf("A", "B", "C", "D", "E", "F")
    val disabledValue = "B"
    var selectedIndex by remember { mutableStateOf(0) }
    Box(modifier = Modifier
        .fillMaxSize()
        .wrapContentSize(Alignment.TopStart)) {
        Text(items[selectedIndex],modifier = Modifier
            .fillMaxWidth()
            .clickable(onClick = { expanded = true })
            .background(
                Color.Gray
            ))
        DropdownMenu(
            expanded = expanded,
            onDismissRequest = { expanded = false },
            modifier = Modifier
                .fillMaxWidth()
                .background(
                    Color.Red
                )
        ) {
            items.forEachIndexed { index, s ->
                DropdownMenuItem(onClick = {
                    selectedIndex = index
                    expanded = false
                }) {
                    val disabledText = if (s == disabledValue) {
                        " (Disabled)"
                    } else {
                        ""
                    }
                    Text(text = s + disabledText)
                }
            }
        }
    }
}

【问题讨论】:

  • showDialog mutableStateOf 对象吗?
  • 是的,我把它放在可以打开调用 compose 方法。

标签: android android-jetpack-compose composable


【解决方案1】:

showDialog 似乎是一个MutableState 对象。因此,当点击图像时,它变为true,并触发重组,然后执行条件块,显示DropDownMenu。但是,在下一行。您将showDialog 等同于false,重新触发重组,并渲染DropDownMenu 折叠。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 2011-06-25
    • 2012-08-10
    • 2012-12-19
    • 2018-08-20
    • 1970-01-01
    相关资源
    最近更新 更多