【问题标题】:Android data binding does not observe kotlin's liveData builderAndroid数据绑定不遵守kotlin的liveData builder
【发布时间】:2019-12-14 15:59:03
【问题描述】:

Android 数据绑定不遵守 kotlin 的 liveData builder

以下代码将创建一个 LiveData,它应该可以通过 XML 中的数据绑定来观察,但它不起作用

val text =
        liveData(Dispatchers.Default) {
            emit("Hello")
}

另一方面,如果在 Kotlin 中观察到它,它工作正常

  vm.text.observe(lifeCycleOwner,{
            binding.texti.text = it
        })

xml:

 <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/texti"
                android:text="@{viewModel.text}"
           />

如果我将实时数据的定义更改为:

val text = MutableLiveData("Hello")

数据绑定自动观察并设置文本

是我做错了还是错误?

【问题讨论】:

    标签: android kotlin data-binding android-livedata


    【解决方案1】:

    您是否设置了绑定的生命周期所有者?绑定初始化应如下所示:

    override fun onCreate(savedInstanceState: Bundle?) {
        val binding = DataBindingUtil.setContentView<MyActivityBinding>(this, R.layout.my_activity)
        binding.setLifecycleOwner(this)
        binding.viewModel = viewModel.get()
        ...
    }
    

    更多详情请见:Use LiveData to notify the UI about data changes

    【讨论】:

    • 正如我所说,它以另一种方式工作,所以这意味着这些设置已经完成。感谢您的友好回答
    • @sajad 您能否将活动、视图模型和布局 xml 的整个初始化代码添加到问题中?绑定应该可以工作,我什至创建了一个最小的示例应用程序,它工作正常。
    • 感谢您的评论,我花了一天时间忘记了这一点,而您的回答完全解决了我的问题,一行简单的代码就可以毁了您的睡眠!哈哈
    猜你喜欢
    • 2018-09-08
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 2016-06-19
    • 2015-09-05
    • 1970-01-01
    相关资源
    最近更新 更多