Android compose onClick在click之前被调用



我在Jetpack compose上的onClick有问题,一旦我运行应用程序,它就会执行点击,返回到此活动后按钮停止工作。见解吗?

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val context = LocalContext.current
linkButton("Go to text views", goTo(context, TextViewActivity::class.java))
}
}
}
@Composable
fun linkButton(msg: String, link: Unit) {
Button(onClick = {
link
}) {
Text(msg)
}
}
@Preview
@Composable
fun PreviewMessageCard() {
val context = LocalContext.current
linkButton(
msg = "Sample",
link = goTo(context, TextViewActivity::class.java)
)
}
private fun goTo(context: Context, clazz: Class<*>) {
context.startActivity(Intent(context, clazz))
}

您实际上正在调用该方法,此时您正在组成linkButton,而不是将其作为回调传递给点击时调用。当点击时,它只是返回一个Unit,这导致了意外的行为。

要解决这个问题,您应该将可组合函数中的参数类型更改为() -> Unit,它表示函数类型。

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val context = LocalContext.current
linkButton("Go to text views") {
goTo(context, TextViewActivity::class.java)
}
}
}
}
@Composable
fun LinkButton(msg: String, link: () -> Unit) {
Button(onClick = {
link()
}) {
Text(msg)
}
}

最新更新