android - Android dataBinding不刷新ui
问题描述
我在 Android 数据绑定方面遇到了一些麻烦。
我有这样的课:
class AppConfig private constructor() : BaseObservable() {
@Bindable
var title = ""
fun updateTitle(newTitle: String) {
title = newTitle
notifyPropertyChanged(BR.title)
}
......
}
当应用程序处于后台时,应用程序收到更新推送并调用函数 updateTitle。然后我转向我的应用程序,我可以看到标题已更改。然后我推送另一个更新,标题没有改变。然后我按下主页按钮并再次将应用程序带到前面,标题已更新。
我已阅读 ViewDataBinding 源代码:
protected void requestRebind() {
if (mContainingBinding != null) {
mContainingBinding.requestRebind();
} else {
synchronized (this) {
if (mPendingRebind) {
return;
}
mPendingRebind = true;
}
if (mLifecycleOwner != null) {
Lifecycle.State state = mLifecycleOwner.getLifecycle().getCurrentState();
if (!state.isAtLeast(Lifecycle.State.STARTED)) {
return; // wait until lifecycle owner is started
}
}
if (USE_CHOREOGRAPHER) {
mChoreographer.postFrameCallback(mFrameCallback);
} else {
mUIThreadHandler.post(mRebindRunnable);
}
}
}
条件!state.isAtLeast(Lifecycle.State.STARTED)
第一次失败,变量mPendingRebind
设置为真。似乎只有在mRebindRunnable
或mFrameCallback
运行时,变量mPendingRebind
才会再次设置为false。所以 UI 永远不会刷新。
我已经看到了这个问题Data binding - XML not updated after onActivityResult。我尝试使用 SingleLiveEvent,并调用updateObserver.call()
Activity 的 onResume。它不起作用。
我也尝试过使用反射mPendingRebind
强行设置错误。它有效,但我认为这不是一个好方法。我应该怎么办?
解决方案
尝试这个
var title = ""
@Bindable get() = title
推荐阅读
- android - 启动器应用程序如何在后台卸载应用程序?
- angular - Angular 6 - '"/node_modules/firebase/index"' 没有导出的成员'functions'
- twilio - 队列的 Twilio 通知
- sql - SQL 返回数字而不是月份
- php - 如何使用 LEFT() 函数完成从数据库中选择的单词
- codenameone - 代号一 - iOS 上的 TextModeLayout 和验证错误反馈
- php - 如果文件真正可编辑,如何使用 Php 检查
- zend-framework - PHP中条形码图像样式的zend库
- php - 尝试在 Attendize 中运行 docker 命令时出错
- c - 管道卡在读取中(C - 系统调用)