gpt4 book ai didi

android - 当我尝试从中获取数据时,ViewModel 返回清晰的对象

转载 作者:行者123 更新时间:2023-11-29 23:13:34 24 4
gpt4 key购买 nike

我正在尝试使用 ViewModel 来保存数据以在 Fragments 之间共享。就是这样:

class AnimalViewModel : ViewModel() {
private var data = MutableLiveData<AnimalWithHints>()

fun setData(animalData: AnimalWithHints) {
data.value = animalData
Timber.e("Saved?")
}

fun getData(): LiveData<AnimalWithHints> {
if (data.value == null) {
Timber.e("Null?")
data.value = AnimalWithHints()
}
return data
}
}

所以我填充了非空对象(检查了它)并且我在交易前写了:

ViewModelProviders.of(this).get(AnimalViewModel::class.java).setData(animalWithHints)

当它发生时,我看到“已保存?”,所以我认为保存效果很好。我记录了 AnimalWithHints 的一些字段,我发现它是正确的。

然后我尝试获取我的对象:

val animalWithHints = ViewModelProviders.of(this).get(AnimalViewModel::class.java).getData().value

然后我看到“Null?”。没错,data.value 是一个新的空 AnimalWithHints 对象。

奇怪的是我只有两行代码,使用ViewModel。我只保存和获取对象,没有地方可以清除它或以某种方式修改它。

我需要你的帮助来了解问题所在。

最佳答案

当您想在 Fragments 之间共享数据时相同的 Activity ,您需要创建 ViewModel 的实例上下文为 Activity .

以下语法为您提供了 ViewModel 的实例那是在 Fragment仅级别 (您可以在 Fragment 本身与该 Frament 内的一些子 fragment 共享它):

ViewModelProviders.of(this@Fragment)[SomeViewModel::class.java] // This will give you view model at fragment level

同时通过 Activity反对你的ViewModelProvider在你的里面Fragment给你ViewModelActivity等级。因此,您在同一 Activity 中有多个 fragment 意思是 Activity 的上下文 相同给你相同的 ViewModel两个对象Fragments .

所以为了分享ViewModel在 fragment 之间,使用以下语法:

ViewModelProviders.of(activity)[SomeViewModel::class.java] // This will provide you shared view model across multiple fragments.

关于android - 当我尝试从中获取数据时,ViewModel 返回清晰的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55667927/

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