【发布时间】:2019-04-14 01:38:29
【问题描述】:
我正在尝试使用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
我看到 “空?”。确实,data.value 是一个新的空 AnimalWithHints 对象。
奇怪的是我只有两行代码,使用ViewModel。我只保存和获取对象,没有地方可以清除或修改。
我需要你帮助了解问题所在。
【问题讨论】:
-
当您想在同一活动上的片段之间传递数据时,您需要通过将
getActivity()作为Activity上下文而不是 this 传递给它来创建ViewModel实例 作为Fragment上下文.. -
是的,它有效。杰出的。你可以组成它来回答。