Android Jetpack Compose onClick事件提前触发、返回后失效问题求解
Jetpack Compose onClick异常问题修复方案
问题根因
你的代码存在参数类型定义错误,直接触发了函数执行而非传递待执行的事件逻辑:
linkButton的link参数被定义为Unit类型,你在传参时直接调用了goTo(context, TextViewActivity::class.java),这个方法会在Composable首次重组时直接执行,所以应用一启动就自动跳转。- Button的
onClick回调中仅引用了已经执行完成的Unit返回值,没有实际可执行的跳转逻辑,因此按钮点击完全无响应,从跳转页返回后也不会恢复功能。
修复步骤
- 修改
linkButton的link参数类型,从Unit替换为无返回值的函数类型() -> Unit,用于接收待执行的点击逻辑 - 调用
linkButton传参时,将goTo方法的调用包裹在lambda表达式中,避免传参时直接执行跳转逻辑 - Button的
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)) }
内容的提问来源于stack exchange,提问作者Jose Gonzalez
相关产品推荐
相关产品推荐

