恢复片段时,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 并按下后退按钮时,将调用片段的 onCreateView
和 onViewCreated
方法,但 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
}
}
在我的片段中,我有这段代码:
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 并按下后退按钮时,将调用片段的 onCreateView
和 onViewCreated
方法,但 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
}
}