在Fragment中强制LiveData Observer在再次显示之后接收更改?

时间:2017-11-15 15:07:58

标签: android android-fragments android-architecture-components android-livedata

我正在实施Android Architecture Components。想象一下如下情况:Fragment正在观察LiveData来更改其UI。用户最小化应用程序并更改状态(在我的情况下从存储库中)。因此,Observer中的Fragment不会因更改而触发,因为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()
            }
        }
    })
}

1 个答案:

答案 0 :(得分:1)

实际上,当LiveData再次显示时,您的活动应该会收到LiveData的最新状态,如video中所述并描述here

  

始终保持最新数据:如果生命周期变为非活动状态,则会在再次变为活动状态时接收最新数据。例如,一个活动在   background返回后立即收到最新数据   前景。

我刚刚在我自己的应用程序中测试它,按照描述工作。因此,应用程序中必定存在另一个错误:您是否正确地从存储库类中设置了postValue?也许是一个不同的线程/ ID,问题?