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 会立即反映这些变化。
以上就是Android DataBinding:LiveData数据更新视图却无效?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号