Android(安卓)>> 17. ViewModel(二)
16lz
2021-01-26
这次我们实现让程序在后台被系统关闭之后仍能够记住数据
build.gradle
- 首先我们在
build.gradle
文件dependencies
中增加这么一行代码:
implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02'
ViewModel 文件
- 然后回到我们创建的
ViewModel
java文件中,为这个继承自ViewModel
的public 类增加构造函数:
private SavedStateHandle handle;ViewModelWithLiveData(SavedStateHandle handle){ this.handle = handle;}
MainActivity.java
- 既然我们对这个ViewModel 类增加了构造函数,那我们势必在对其实例化的时候也要带入一个
SavedStateHandle
类型对象:
viewModelWithLiveData = ViewModelProviders.of(this, new SavedStateViewModelFactory(this)).get(ViewModelWithLiveData.class);
- 我们知道,
savedInstanceState
是以键值对的方式存储数据的,那SavedStateHandle 中的数据也会是键值对的形式
所以,我们需要为我们需要存储的数据创建一个“键”:
public final static String KEY_IP = "ip_address";public final static String KEY_PORT = "port_address";
ViewModel 文件
- 有了“键”,当然就要初始化值了:
public MutableLiveData<String> getLikedNumber_ip() { if (!handle.contains(MainActivity.KEY_IP)){ handle.set(MainActivity.KEY_IP, ""); } return handle.getLiveData(MainActivity.KEY_IP);}public MutableLiveData<String> getLikedNumber_port() { if (!handle.contains(MainActivity.KEY_PORT)){ handle.set(MainActivity.KEY_PORT, ""); } return handle.getLiveData(MainActivity.KEY_PORT);}
这是对两对键值对进行初始化的程序,我们用这两个方法进行数据的读取,若没有则向handle
中增添一对键值对
设置数据的代码:
public void setEditText_ip(String string){ handle.set(MainActivity.KEY_IP, string);}public void setEditText_port(String string){ handle.set(MainActivity.KEY_PORT, string);}
如此一来,我们的数据在程序在后台被系统杀掉后仍能进行保存,但还不是永久性地保存于系统中,下一节将会讲解如何永久性地保存于系统中
更多相关文章
- Android系统初始化过程分析(Android(安卓)4.3)
- QT5.2 Android(安卓)App中使用QML文件
- Android(安卓)Studio(2.3.3)配置Kotlin笔记
- Android学习笔记•从零开始•第二天•Intent-穿梭在Activity之间
- XE5 Android(安卓)开发数据访问server端
- Android——Log,Toast提示框,Intent跳转
- Android(安卓)遍历删除SD卡中某一文件夹下的指定子文件夹及其子
- Android(安卓)Studio 找不到R文件解决方法汇总
- Android(安卓)命令行构建和签署APK