Hello! 欢迎来到小浪资源网!


Android DataBinding:LiveData数据更新视图却无效?


Android DataBinding:LiveData数据更新视图却无效?

android databinding 数据驱动视图不更新?

在这个问题中,作者使用 viewmodel 和 livedata 来管理 ui 数据。viewmodel 中的 level livedata 属性通过 @{vm.gettext()} 绑定到 textview 的文本。当更新 level 时,vm 中定义的 gettext() 方法会根据其值返回相应的文本。然而,用户界面并未反映这些更新。

问题原因:

未能为 viewmodel 设置生命周期所有者是导致此问题的关键原因。viewmodel 需要知道视图的生命周期阶段,以便在视图销毁或轮换时自动取消 livedata 观察者。如果没有设置生命周期所有者,则 livedata 永远不会被观察,因此视图也不会收到任何更新。

解决方案:

要在 xml 视图中设置生命周期所有者,请使用 android:lifecycleowner 属性。例如:

<textview     // ...     android:text='@{vm.gettext()}'     android:lifecycleowner='@global_activity' />

或者,您可以在 activity 或 fragment 中通过调用 binding.setlifecycleowner(this) 来设置所有者:

// 在 Activity 中 binding.setLifecycleOwner(this)  // 在 Fragment 中 binding.setLifecycleOwner(viewLifecycleOwner)

通过设置生命周期所有者,viewmodel 可以正确检测视图的生命周期变化,并相应地取消 livedata 观察者。这将确保在更新 level 时,ui 会立即反映这些变化。

相关阅读