恢复片段时,LiveData 不会重新发出

LiveData is not re-emitting when fragment is resumed

在我的片段中,我有这段代码:

fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    //...
    viewModel.state.observe(viewLifecycleOwner) {
        //do something
    }
}

在我的 ViewModel 中:

class MyViewModel: ViewModel() {

    val state = liveData {
        val state = dataSource.getState()
        emit(state)
   }

}

当我导航到另一个片段或 activity 并按下后退按钮时,将调用片段的 onCreateViewonViewCreated 方法,但 viewModel.state 具有相同的值。我的意思是,dataSource.getState() 不再被调用。我需要从数据源重新获取状态。

这可以使用 liveData 生成器吗?如果没有,我应该怎么做?

你每次需要的时候只需要调用加载函数。一种可行的方法

视图模型:

val stateLiveData = MutableLiveData<>()
    fun loadData() {
        viewModelScope.launch {
            val state = dataSource.getState()
            stateLiveData.setValue(state)
        }
    }

片段:

fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    //...
    viewModel.loadData()
    viewModel.stateLiveData.observe(viewLifecycleOwner) {
        //do something
    }
}