首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定- MediatorLiveData未在片段内触发

绑定- MediatorLiveData未在片段内触发
EN

Stack Overflow用户
提问于 2019-05-24 14:43:42
回答 2查看 1K关注 0票数 1

在片段中使用MediatorLiveData时,我面临一些问题。

例如:

我有一个View Model

代码语言:javascript
复制
class InfoPessoalViewModel : NavigationViewModel(){

//fields
val nameField = MutableLiveData<String>()

val formMediator = MediatorLiveData<Boolean>()

init {
    formMediator.addSource(nameField){}
}

我把这个名字放在我的xml中,通过数据绑定

代码语言:javascript
复制
<EditText
            android:id="@+id/name"
            android:text="@{viewModel.nameField}"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPersonName" />

但观察者并没有在我的碎片里开火。

代码语言:javascript
复制
bindingView.apply {
            lifecycleOwner = this@InfoFragment
            viewModel = viewModel
        }

        viewModel.formMediator.observe(this, Observer {
            Log.d("Mediator","Fired!")
        })

有人知道我做错了什么吗?

编辑

我在这里改了双向绑定

android:text="@={viewModel.nameField}"

但这一切还没有开始

代码语言:javascript
复制
    viewModel.nameField.observe(this, Observer {
        Log.d("Livedata","Fired!")
    })

    viewModel.formMediator.observe(this, Observer {
        Log.d("Livedata","Fired!")
    })

编辑2

我正在导入这个viewModel,如下所示:

代码语言:javascript
复制
  <data>
    <variable
        name="viewModel"
        type="br.com.original.bank.sejaoriginal.steps.infopersonal.InfoPessoalViewModel" />
</data>

以及片段中的绑定视图:

代码语言:javascript
复制
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没有被调用的问题仍然存在

EN

回答 2

Stack Overflow用户

发布于 2019-05-24 15:19:10

按顺序检查这些步骤:

1)改变这种情况:

代码语言:javascript
复制
android:text="@{viewModel.nameField}"

对此(请注意附加的等号):

代码语言:javascript
复制
android:text="@={viewModel.nameField}"

有关双向数据绑定这里的更多信息

2)检查是否在XML布局中添加了正确的视图模型绑定:

3)检查代码绑定,将绑定代码更改为:

代码语言:javascript
复制
bindingView.apply {
    lifecycleOwner = this@InfoFragment
    viewModel = this@InfoFragment.viewModel
}
票数 0
EN

Stack Overflow用户

发布于 2020-05-02 04:08:56

有一件事对我很有帮助,尽管这篇文章没有我遇到的问题:

如果有一个返回livedata的函数,如myName():LiveData {返回myLiveName },

视图模型绑定不会显示xml布局中的值。活动数据必须是一个变量,而不是函数,例如: val myNameVariable: LiveData = myName()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56294937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档