当全局值更改时,如何使 kotlin 可组合更新

How do I make kotlin composable update when a global value changes

提问人:Tornseglare 提问时间:10/25/2023 更新时间:10/25/2023 访问量:42

问:

我正在学习 Kotlin 和 Composables 的基础知识。我的用例非常简单,我有一个全局变量:

var globalValue : Int = 1

然后我有了这个可组合文件:

@Composable
fun SomeView(modifier: Modifier = Modifier) {
  ...some Text() printing globalValue

当我更改 的值时,我希望调用 SomeView()。globalValue

我已经尝试过将 as 参数用于可组合项,但我似乎错过了重点,没有任何更新。by rememberglobalValue

任何帮助都是值得赞赏的!

人造人 科特林 用户界面 可组合

评论

0赞 Diego Torres Milano 10/25/2023
检查 developer.android.com/jetpack/compose/state-hoisting
0赞 Tornseglare 10/25/2023
谢谢迭戈,我之前读过它并看过视频,但这是一个如此复杂的例子,根本没有切中要害。我需要一个简单的代码示例来说明如何绑定到 globalValue。
0赞 Tornseglare 10/26/2023
做功课真的是有回报的。如果您像我一样是 kotlin 的新手,请花点时间学习这些很棒的课程!这个几乎回答了我的问题:developer.android.com/courses/pathways/......

答:

1赞 Mohammad Fallah 10/25/2023 #1

当变量的值发生变化时,您应该使用来更新可组合项,因此您可以简单地使用如下所示:StatemutableStateOf

val globalValue = mutableStateOf(1)

因此,您需要使用 property 读取和写入此状态,例如,要将此变量设置为 10,您可以编写以下内容:value

globalValue.value = 10

如果要在不调用的情况下使用 globalVariable,则只需使用 key 对属性使用 delegation。.valueby

var globalValue by mutableStateOf(1)

现在,您可以将该变量设置为普通变量。Int

评论

0赞 Tenfour04 10/25/2023
除非您将 State 用作代表,否则我不会将其与 State 结合使用。var
0赞 Mohammad Fallah 10/25/2023
@Tenfour04对不起,我不明白你的意思。如果你需要使用 pure,你可以使用关键字进行委托,然后只需使用你的 globalVariable 作为变量IntegerbyInteger
2赞 Tenfour04 10/25/2023
我是说 State 属性应该是只读的,因为永远没有理由将其更改为不同的 State 实例。
0赞 Mohammad Fallah 10/25/2023
@Tenfour04 哦,是的,这是一个错误。谢谢。我编辑了它。
0赞 Tornseglare 10/25/2023
谢谢你,无数的穆罕默德!正如我所怀疑的那样,这对我来说太简单了,我无法理解。:-D我的错误是认为带有 mutableStateOf(1) 的行必须驻留在可组合函数内部,所以我无法理解如何让它“外部”,即全局。