我阅读了许多有关viewmodel和livedata的教程,但是我没有真正在mvvm模式的viewmodel类中使用livedata。提前致谢。
答案 0 :(得分:0)
MVVM模式是只讲V-> VM-> M并作出反应M-> VM->V。这意味着View可以调用ViewModel上的方法,但是ViewModel没有对View的引用调用其上的方法(设置数据)。从ViewModel到View的通信方式是通过View观察一些变量(ObservableField,LiveData,RxJava等)。
LiveData是一个很好的可观察对象,可提供viewModel和View之间的通信,尤其是在状态变化(例如旋转)时。在数据库更改和Room方面,它还提供了Model与View之间的良好沟通。
答案 1 :(得分:0)
根据Google文档,如果您已经在使用Rx或Agera之类的库,则可以继续使用它们代替LiveData。但是在这种情况下,您有责任按照Android组件生命周期来处理对象分配和取消分配。
在使用MVVM模式时,由于viewmodel没有对视图的引用,因此需要可观察的数据持有者来观察更改,以便可以正确更新视图。
在这种情况下,您可以使用实时数据,体系结构组件之一或任何其他可从Rx中观察到的数据。
主要区别是livedata尊重android生命周期,而rx observables不尊重。
使用livedata时,不会发生由于onChange调用而停止活动的崩溃,因为它是生命周期感知的。 但是,如果没有livedata,则取决于您来处理这种情况。
答案 2 :(得分:0)
Android开发人员通常使用ViewModel这样的LiveData容器
class MyViewModel {
val myLiveData = MutableLiveData<String>()
}
但是,为什么我们不直接使用String
类呢?
class MyViewModel {
val myString = "Hello"
}
因为我们要对字符串使用Observer模式。
model.myLiveData.postValue("Echo")
model.myLiveData.observe(this, Observer {
// Show "Echo"
toast(it)
})
那为什么我们需要ViewModel?因为我们想在我们的Activity或Fragment上获得相同的ViewModel实例(单例)。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProviders.of(this)[MyViewModel::class.java]
viewModel.myLiveData.observe(this, Observer {
textView.text = it
})
我认为应该足以开始了解ViewModel和LiveData之间的区别。
带LiveData的ViewModel与没有LiveData的ViewModel有何区别?
由您决定,您是否需要在ViewModel上使用LiveData?
我没有在mvvm模式中的viewmodel类中实际使用livedata。
了解了ViewModel和LiveData的区别之后,请阅读有关MVVM模式的更多信息。
模型-视图-视图-模型中的视图模型与Jetpack的ViewModel和LiveData不同。 MVVM中的视图模型是一个概念,您可以使用常规Java类创建自己的视图模型。只要符合MVVM行为即可。