Android 如何执行不受配置更改影响的初始查询

Android 如何执行不受配置更改影响的初始查询,android,mvvm,constructor,viewmodel,dagger-2,Android,Mvvm,Constructor,Viewmodel,Dagger 2,我需要在dagger2使用ViewModelProvider.Factory注入的ViewModel中执行初始查询,我可以在片段中执行,但在这种情况下,当旋转屏幕时,将重新创建活动并再次执行初始查询,我不希望出现这种行为,我想查看旋转前查看的相同数据 可能的解决方案 我可以在ViewModel中定义一个布尔变量并编写以下逻辑: _视图模型 var isScreenRotated = true _碎片 override fun onViewCreated(view: View, saved

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

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

_视图模型

var isScreenRotated = true
_碎片

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

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

    }
提前谢谢

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

这就是为什么Room会为您提供
LiveData
,您可以将其存储在
ViewModel
中,以便在重新订阅时不会重新获取数据

如果数据已经开始加载或已经加载,而屏幕未触发重新加载,则无需关心屏幕是否旋转


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

到目前为止您尝试了什么?请在此处发布代码,以便我们更好地了解您想要的内容。请参阅编辑的帖子,我实际上是在询问我是否能够在注入的ViewModel的构造函数中执行代码,因为我希望在应用程序启动后立即执行初始查询,但我不希望它受到配置更改的影响,因此,我不想在旋转屏幕时再次执行初始查询。您不需要在viewmodel的init中执行它,只需添加一个方法并从活动或片段调用。如果您在应用程序级别需要它,那就另当别论了。@DevMike01,我正在考虑它,我肯定不能在ViewModel的构造函数中执行初始查询,因为我必须在查询中使用ViewModel本身,所以唯一的方法就是我在问题中写的方法。@cutiko但是这样,旋转屏幕后将再次调用并执行该方法,因为活动将被重新创建。谢谢,确实如此,但我想你不明白我想做什么我想在应用程序第一次启动时执行一个初始查询,所以我希望用户在一开始就看到照片列表,然后用户可以搜索他们想要的任何类别,此查询写入片段中,旋转屏幕后,将再次调用onViewCreated,从而再次执行初始查询。因此,我在问题中编写的可能解决方案不是最好的,但它很有效。这就是为什么不在
onCreateView
中触发数据加载,而是在
MutableLiveData.onActive中触发它,这将通过开始观察它来触发,但是,如果假设LiveData保存在ViewModel中,那么它将不会再次被触发。我想你只是不明白我的答案/