首页 > 解决方案 > 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设置为真。似乎只有在mRebindRunnablemFrameCallback运行时,变量mPendingRebind才会再次设置为false。所以 UI 永远不会刷新。

我已经看到了这个问题Data binding - XML not updated after onActivityResult。我尝试使用 SingleLiveEvent,并调用updateObserver.call()Activity 的 onResume。它不起作用。

我也尝试过使用反射mPendingRebind强行设置错误。它有效,但我认为这不是一个好方法。我应该怎么办?

标签: androidmvvmandroid-databinding

解决方案


尝试这个

var title = ""
@Bindable get() = title

推荐阅读