首页 > 解决方案 > 如何执行不受配置更改影响的初始查询

问题描述

我需要在 dagger2 使用 ViewModelProvider.Factory 注入的 ViewModel 中执行初始查询,我可以在片段中执行此操作,但在这种情况下,旋转屏幕时将重新创建活动并执行初始查询再次,我不想要这种行为,我想看到我在旋转之前查看的相同数据。

可能的解决方案
我可以在 ViewModel 中定义一个布尔变量并编写以下逻辑:

_ViewModel

var isScreenRotated = true

_分段

   override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

        if (searchViewModel.isScreenRotated) {
            searchViewModel.isScreenRotated = false
            searchViewModel.executeSearch("fruits", 1)
        }

    }

提前致谢。

标签: androidmvvmconstructorviewmodeldagger-2

解决方案


旋转屏幕时,将重新创建活动,并且将再次执行初始查询,我不希望出现这种行为,我希望看到与旋转前相同的数据。

这就是为什么 Room 为您提供LiveData<List<T>>可以存储在您的 中的原因ViewModel,以便在重新订阅时不会重新获取数据。

如果数据已经开始加载或已经加载,如果它不触发重新加载,您不需要关心屏幕是否旋转。

如果您需要自定义行为,请自行扩展MutableLiveData和跟踪加载状态(onActive如果您尚未开始加载,请开始加载)。


推荐阅读