[英]ViewModel return clear object when i try to get data from it
I'm trying to use ViewModel
, for saving data to share between Fragments
.我正在尝试使用ViewModel
来保存数据以在Fragments
之间共享。 That is it:这就对了:
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
}
}
So I've filled non-null object (checked it) and I write before transaction:所以我已经填充了非空对象(检查它)并在交易前写:
ViewModelProviders.of(this).get(AnimalViewModel::class.java).setData(animalWithHints)
I see "Saved?"我看到“已保存?” when it happens, so I think save working good.当它发生时,所以我认为保存工作很好。 I logged some field of AnimalWithHints
, and I saw it was correct.我记录了AnimalWithHints
一些字段,我看到它是正确的。
Then I try to get my object:然后我尝试获取我的对象:
val animalWithHints = ViewModelProviders.of(this).get(AnimalViewModel::class.java).getData().value
And I see "Null?"我看到“空?” . . And it's true, data.value
is rly new empty AnimalWithHints
object.这是真的, data.value
是一个新的空AnimalWithHints
对象。
Strange thing is I have only two lines of code, using ViewModel
.奇怪的是我只有两行代码,使用ViewModel
。 I only save and get object, there is no place when I can clear it or modify somehow.我只保存和获取对象,没有地方可以清除或以某种方式修改。
I need you help to understand what's wrong.我需要你帮助了解出了什么问题。
When you want to share data between your Fragments
that are in same Activity
, you'll need to create instance of ViewModel
with context to Activity
.当您想在同一个Activity
Fragments
之间共享数据时,您需要创建ViewModel
实例,并带有Activity
上下文。
Below syntax provides you instance of ViewModel
that is at Fragment
level only (You can share it at Fragment itself with some child fragments inside of that Frament) :以下语法为您提供了仅处于Fragment
级别的ViewModel
实例(您可以在 Fragment 本身与该 Frament 内的一些子片段共享它) :
ViewModelProviders.of(this@Fragment)[SomeViewModel::class.java] // This will give you view model at fragment level
While passing Activity
object to your ViewModelProvider
inside your Fragment
gives you ViewModel
at Activity
level.虽然传递Activity
对象添加到您ViewModelProvider
您的内部Fragment
让你ViewModel
的Activity
水平。 Hence You're having multiple Fragments inside same Activity
meaning context of Activity is same gives your same ViewModel
object at both Fragments
.因此,您在同一个Activity
有多个 Fragment ,这意味着Activity
上下文是相同的,在两个Fragments
上都给出了相同的ViewModel
对象。
So for sharing ViewModel
between fragments, use below syntax :因此,要在片段之间共享ViewModel
,请使用以下语法:
ViewModelProviders.of(activity)[SomeViewModel::class.java] // This will provide you shared view model across multiple fragments.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.