强制 Fragment 内的 LiveData Observer 在再次可见后接收更改?

Force LiveData Observer inside a Fragment to receive a change after coming visible again?

我正在实施 Android Architecture Components。想象一下像下面这样的情况,您的 Fragment 正在观察 LiveData 以更改其 UI。用户最小化应用程序并更改状态(在我的例子中来自存储库)。因此 Fragment 中的 Observer 不会因更改而触发,因为 Fragment 不可见。但是,当用户返回应用程序时,它不会触发新状态。如果状态再次更改(当 Fragment 可见时),Observer 会收到更改。你知道当片段再次可见时强制更新的任何方法吗?

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)

    vm = ViewModelProviders.of(this, viewModelFactory).get(MyViewModel::class.java)
    vm.getStatus()?.observe(this, Observer<MyRepository.Status> { status ->
        if (status != null) {
            when (status) {
                NONE -> setNoneUI()
                LOADING -> setLoadingUI()
                CONTENT -> setContentUI()
                ERROR -> setErrorUI()
            }
        }
    })
}

实际上,您的 activity 应该在再次可见时从 LiveData 接收最新状态,如 video and described here 中所述:

Always up to date data: If a lifecycle becomes inactive, it receives the latest data upon becoming active again. For example, an activity that was in the background receives the latest data right after it returns to the foreground.

我刚刚在我自己的应用程序中对其进行了测试,如描述的那样工作。因此,您的应用程序中肯定还有另一个错误:您是否从存储库 class 中正确设置了 LiveData?也许是不同的线程/postValue 问题?