android - 如何执行不受配置更改影响的初始查询
问题描述
我需要在 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)
}
}
提前致谢。
解决方案
旋转屏幕时,将重新创建活动,并且将再次执行初始查询,我不希望出现这种行为,我希望看到与旋转前相同的数据。
这就是为什么 Room 为您提供LiveData<List<T>>
可以存储在您的 中的原因ViewModel
,以便在重新订阅时不会重新获取数据。
如果数据已经开始加载或已经加载,如果它不触发重新加载,您不需要关心屏幕是否旋转。
如果您需要自定义行为,请自行扩展MutableLiveData
和跟踪加载状态(onActive
如果您尚未开始加载,请开始加载)。
推荐阅读
- python - PyTorch:有没有办法将模型存储在 CPU 内存中,但在 GPU 上运行大型模型的所有操作?
- spring-boot - 当`SpringBootApplication`推动`WebMvcConfigurer`时,使用Spring Boot配置Guava Multimap的自动序列化
- angular - Angular 2在formArrays上找不到具有未指定名称属性的控件在使用反应式表单方法时遇到错误
- validation - DataValidationBuilder 类上的 requireCheckbox 方法签名含义
- javascript - 如何使用从视频处理的 WebAudio 修复 Chome 中的 CORS 问题?
- javascript - 使用按钮而不是文本输入时,更改事件上的 jQuery Datepicker 不会被触发
- php - 提交表单后,需要在重定向到感谢页面之前在弹出窗口上显示变量值
- python-3.x - 二维数组和 for 循环
- php - 在 Laravel 5.7 中为表单设置路由
- c# - 绑定重定向不起作用时该怎么办?