gpt4 book ai didi

android - 为什么状态更新未反射(reflect)在 AndroidView 上

转载 作者:行者123 更新时间:2023-12-04 23:48:43 28 4
gpt4 key购买 nike

在 Jetpack Compose 中,我有一个 AndroidView使用一个监听器读取传递的状态,如下所示:

@Composable
fun Scanner(
state: ScannerState,
modifier: Modifier = Modifier,
) {
AndroidView(
modifier = modifier,
factory = { context ->
ScannerView(context).apply {
onButtonClicked = {
if (state.isLoading) <-- HERE I READ THE STATE
...
}
}
}
},
当状态更新并重新组合 View 时,问题就出现了。如果 onButtonClicked之后再次调用回调,它保持初始状态,并且不读取此函数接收到的最后更新状态。

最佳答案

factory在创建 View 时只被调用一次。这就是 lambda 仅捕获初始状态的原因。
要传递更新的状态,您需要使用 update论据,像这样:

AndroidView(
modifier = modifier,
factory = { context ->
ScannerView(context)
},
update = { view
view.onButtonClicked = {
if (state.isLoading) {
...
}
}
},
)

关于android - 为什么状态更新未反射(reflect)在 AndroidView 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70032514/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com