gpt4 book ai didi

android - Jetpack-Android 仅当对象的某个属性发生变化时如何触发重组

转载 作者:行者123 更新时间:2023-12-05 02:33:51 25 4
gpt4 key购买 nike

想象一下下面的物体

data class CourseState(
val key:Int=0,
val name:String="",
val courses:Courses=Courses())

实现以下模式

private val _courseState = mutableStateOf(CourseState())
val courseState: State<CourseState> = _courseState

我可以通过调用来触发我的 UI 的重组:

_courseState.value = CourseState()

但不是通过调用:

_courseState.value.courses.addCourse(Course("some course))

这有点令人沮丧,因为即使对象已经明显改变,我也被迫创建父对象的一个​​全新实例,以便在其中引发一个小的变化。

现在,我知道 Compose 在幕后正在使用 .equals() 方法来确定它是否应该重新组合布局,所以我对如何实现预期有了一些想法行为。

  1. 覆盖 equals 方法:这意味着一些样板代码,并且必须对构成我的对象的整个嵌套类集完成。这可能有效,但看起来很危险且麻烦。

  2. 使用 clone 方法或接受其自己的类的实例作为参数的构造函数来创建我的对象的相同副本,该副本仍然表示我可以修改的新实例然后作为可变状态值传递。听起来比以前的 optoin 更容易,但优雅是不同的东西

  3. 深入研究 State 和 MutableState 类,看看是否有办法让它们按我想要的方式运行。我依靠你们中的一些人以前做过这件事,所以我不必 XD

让我知道您的想法,或者是否还有其他一些我目前还没有想到的明显解决方案

最佳答案

我会考虑两种选择:

  1. 如您所述,为每次更改创建对象的新实例。使用数据类和复制,这很容易,但会增加一些开销。
  2. 使您需要更改的所有数据都可观察到。如果你只想从compose中观察它们,就把它设为State,否则你可以使用FlowLiveData。我想你的 Courses 类包含一些 List您正在添加项目。使它成为 mutableStateListOf() ,每当你在那里添加东西时,使用它的可组合项应该自动重组。

关于android - Jetpack-Android 仅当对象的某个属性发生变化时如何触发重组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70863835/

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