android - 如何使用 ViewModel 的新保存状态模块
问题描述
我正在使用生命周期版本 2.2.0-rc03,发现的官方文档和文章甚至没有列出正确的类名或构造函数参数。我想我必须通过这样的方式获取 ViewModel 实例
viewModel = ViewModelProvider(this, SavedStateViewModelFactory(requireActivity().application, savedStateRegistryOwner))
.get(SelectedTracksViewModel::class.java)
但我无法弄清楚 SavedStateRegistryOwner。
有人可以举一个简单的例子来说明如何创建保存状态的 ViewModel 实例以及在 ViewModel 中保存和恢复值的正确方法吗?
解决方案
要为 View Model 使用 Saved State 模块,您必须将androidx.lifecycle:lifecycle-viewmodel-savedstate
依赖项添加到您的项目中。这个例子是基于 version 编写的1.0.0-rc03
。
请将以下行添加到您的项目 Gradle 文件中:
implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03'
视图模型实现:
class SavedStateViewModel(private val state: SavedStateHandle) : ViewModel() {
val liveData = state.getLiveData("liveData", Random.nextInt().toString())
fun saveState() {
state.set("liveData", liveData.value)
}
}
活动实施:
class SavedStateActivity : AppCompatActivity() {
lateinit var viewModel: SavedStateViewModel;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding: ActivityStateBinding = DataBindingUtil.setContentView(this, R.layout.activity_state)
viewModel = ViewModelProvider(this, SavedStateViewModelFactory(this.application, this)).get(SavedStateViewModel::class.java)
binding.viewModel = viewModel
binding.lifecycleOwner = this
}
override fun onSaveInstanceState(outState: Bundle) {
if(::viewModel.isInitialized)
viewModel.saveState()
super.onSaveInstanceState(outState)
}
}
我已经测试了这段代码,它工作正常。
推荐阅读
- sql-server - 程序/货币查找表
- firebase - Firebase 重定向到已删除的函数
- google-sheets - SUM 给了我一个日期而不是 Google 表格中的数字
- selenium-webdriver - 如何将我的 Selenium 项目从一台笔记本电脑复制到另一台笔记本电脑?
- python - Qt 自定义 QFileSystemModel 对顺序文件进行分组
- xaml - 首次使用 Xamarin.Forms 的用户入职
- java - 如何使用嵌套的 While 循环在 Java 中显示行和列
- excel - VBA 自动排序与单元格中的公式
- c# - C# 在异步任务中使用 sql 连接的最佳方法
- angular - 等待单元测试Angular中的可观察内部方法