在片段中使用MediatorLiveData时,我面临一些问题。
例如:
我有一个View Model
class InfoPessoalViewModel : NavigationViewModel(){
//fields
val nameField = MutableLiveData<String>()
val formMediator = MediatorLiveData<Boolean>()
init {
formMediator.addSource(nameField){}
}我把这个名字放在我的xml中,通过数据绑定
<EditText
android:id="@+id/name"
android:text="@{viewModel.nameField}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName" />但观察者并没有在我的碎片里开火。
bindingView.apply {
lifecycleOwner = this@InfoFragment
viewModel = viewModel
}
viewModel.formMediator.observe(this, Observer {
Log.d("Mediator","Fired!")
})有人知道我做错了什么吗?
编辑
我在这里改了双向绑定
android:text="@={viewModel.nameField}"
但这一切还没有开始
viewModel.nameField.observe(this, Observer {
Log.d("Livedata","Fired!")
})
viewModel.formMediator.observe(this, Observer {
Log.d("Livedata","Fired!")
})编辑2
我正在导入这个viewModel,如下所示:
<data>
<variable
name="viewModel"
type="br.com.original.bank.sejaoriginal.steps.infopersonal.InfoPessoalViewModel" />
</data>以及片段中的绑定视图:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
bindingView = DataBindingUtil.inflate(inflater,R.layout.fragment_info_pessoal,container,false)
return bindingView.root
}编辑3
因此,最初的问题是使用viewModel = viewModel,在apply方法中引用错误。
但是MediatorLiveData没有被调用的问题仍然存在
发布于 2019-05-24 15:19:10
按顺序检查这些步骤:
1)改变这种情况:
android:text="@{viewModel.nameField}"对此(请注意附加的等号):
android:text="@={viewModel.nameField}"有关双向数据绑定这里的更多信息
2)检查是否在XML布局中添加了正确的视图模型绑定:

3)检查代码绑定,将绑定代码更改为:
bindingView.apply {
lifecycleOwner = this@InfoFragment
viewModel = this@InfoFragment.viewModel
}发布于 2020-05-02 04:08:56
有一件事对我很有帮助,尽管这篇文章没有我遇到的问题:
如果有一个返回livedata的函数,如myName():LiveData {返回myLiveName },
视图模型绑定不会显示xml布局中的值。活动数据必须是一个变量,而不是函数,例如: val myNameVariable: LiveData = myName()
https://stackoverflow.com/questions/56294937
复制相似问题