Jetpack Compose - 我们如何在 onClick() 中调用 @Composable 函数

时间:2021-01-09 10:35:26

标签: android-jetpack-compose

我知道在 onClick 中调用可组合函数是不可能的。 @Composable 调用只能在@Composable 函数的上下文中发生

撰写版本 - alpha06

但我坚持以下要求。 要求是, 在 onClick 中调用服务器 api 调用。

LazyColumnFor(items = list) { reports ->
    Box(Modifier.clickable(
        onClick = {
            //API call
            val liveDataReportsDetails =
                viewModel.getReportDetails("xxxx")
            LiveDataComponentForReportsDetails(liveDataReportsDetails)


        }
    )) {

        ReportListItem(
            item = reports
        )
    }
}

1 个答案:

答案 0 :(得分:5)

所以你是对的,不能从按钮或修饰符的 onClicks 中调用可组合函数。所以你需要创建一个像这样的值:

private val showDialog = mutableStateOf(false)

当设置为 true 时,您要调用可组合代码,例如:

if(showDialog.value) {
    alert()
}

警报类似于:

@Composable
fun alert() {
    AlertDialog(
        title = {
            Text(text = "Test")
        },
        text = {
            Text("Test")
        },
        onDismissRequest = {

        },
        buttons = {
            Button(onClick = { showDialog.value = false }) {
                Text("test")
            }
        }

    )
}

现在完成更改预期的布尔值,例如:

Box(Modifier.clickable(
    onClick = {
        showDialog.value = true
    }
))

我希望这个解释有帮助,当然值不一定是布尔值,但你明白了这个概念:)