我需要在dagger2使用ViewModelProvider.Factory注入的ViewModel中执行初始查询,我可以在片段中执行此操作,但是在这种情况下,当旋转屏幕时,将重新创建活动,并且初始查询将再次执行,我不希望出现这种情况,我想看到旋转之前正在查看的相同数据。
可能的解决方案我可以在ViewModel中定义一个布尔变量并编写此逻辑:
_ ViewModel
var isScreenRotated = true
_ Fragment
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
if (searchViewModel.isScreenRotated) {
searchViewModel.isScreenRotated = false
searchViewModel.executeSearch("fruits", 1)
}
}
提前感谢。
当旋转屏幕时,将重新创建活动,并且将再次执行初始查询,并且我不希望出现这种情况,我希望看到与旋转前相同的数据。
这就是为什么Room为您提供LiveData<List<T>>
并可以将其存储在ViewModel
中,以便在重新订阅时不会重新获取数据的原因。
如果数据已经开始加载或已经加载,则不必担心屏幕是否旋转,如果它不触发重新加载,则无需担心。
如果需要自定义行为,请扩展MutableLiveData
并自己跟踪加载状态(如果尚未开始加载,请从onActive
开始加载。)>