在Jetpack Compose应用程序中,我有两个类似以下内容的组合:
@Composable
fun Main() {
println("Composed Main")
val context = LocalContext.current
var text by remember { mutableStateOf("") }
fun update(num: Number) {
text = num.toString()
Toast.makeText(context, "Toast", Toast.LENGTH_SHORT).show()
}
Column {
Text(text)
Keypad { update(it) }
}
}
@Composable
fun Keypad(onClick: (Number) -> Unit) {
println("Composed Keypad")
Column {
for (i in 1..10) {
Button(onClick = {onClick(i)}) {
Text(i.toString())
}
}
}
}
单击每个按钮会使两个可组合对象重新组合,并生成以下输出:
I/System.out: Composed Main
I/System.out: Composed Keypad
重新组合Keypad
个Composable是不必要的,而且会使应用程序冻结(在更大的项目中会冻结几秒钟).
删除事件句柄中上下文的用法(在这里,注释掉Toast
)可以解决问题,并且不会重新组合Keypad
并生成以下输出:
I/System.out: Composed Main
有没有其他方法可以在不引起不必要的重组的情况下在事件中使用上下文?