我想通过与livedata的数据绑定来更新视图。让我们来看看这种情况。
数据类
data class Movie(var name: String = "", var createdAt: String = "")
ViewModel
class MyViewModel: ViewModel(){
var pageTitle: MutableLiveData<String>()
var movie: MutableLiveData<Movie>()
fun changeTitleAndMovieName()
pageTitle.value = "Title Changed"
movie.value.name = "Movie Name Changed"
}
}
XML
<layout>
...
<TextView
...
android:text="@{`Title: `+viewmodel.pageTitle `Name: `+viewmodel.movie.name}"/>
<Button
...
android:onClick="@{() -> viewmodel.changeTitleAndMovieName()}"/>
</layout>
我想做什么?
现在发生了什么?
在更改Movie的任何属性时,是否有任何方法可以将Movie类型LiveData更新为视图。
我不想将对象重新分配给实时数据,例如viewmodel.movie.value = Movie(...)
答案 0 :(得分:0)
我已经回答了我的问题。 Here
的提示参考链接的答案是待办事项变长。我有一个非常简单的解决方案。
这是我所做的:
只需使用 BaseObservable 继承您的数据类,然后在对象的属性从任何地方更改后,只需调用notifyChange()方法即可。
即 数据类
data class Movie(var name: String = "", var createdAt: String = "") : BaseObservable()
ViewModel
class MyViewModel: ViewModel(){
var pageTitle: MutableLiveData<String>()
var movie: MutableLiveData<Movie>()
fun changeTitleAndMovieName()
pageTitle.value = "Title Changed"
movie.value.name = "Movie Name Changed"
//here is the megic
movie.value.notifyChange()
}
}