ViewModel 是什么?
ViewModel
是用来存储和管理相关UI 数据但并不会因屏幕旋转而销毁的一个类,从上图可以看出,一个activity
在多状态中不断轮回的过程中,这个ViewModel
是一直在进行一个数据的存储和管理工作的,直到一个应用程序被后台杀死,ViewModel
则被重置,UI 数据消失
如何使用ViewModel
ViewModel 实际上就是把一些会随着activity 中的数据单独存储。
-
首先我们在各个
activity
的java 文件的同级目录中创建一个类MyViewModel
,这个类要继承自ViewModel,然后在这个类中创建你需要存储的数据。
例如你需要存储一个登录activity
的用户名和密码,那你就声明两个public 类型的String。 -
然后在
activity
的java 代码中创建一个ViewModel
对象,在onCreate()
方法中对其进行实例化(不能使用new
,要使用ViewModelProviders
:
MyViewModel myViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
medittext_name.setText(myViewModel.ip_string);
medittext_password.setText(myViewModel.port_string);
}
- 最后在你认为需要的地方对
myViewModel.ip_string
和myViewModel.port_string
这两个变量进行赋值,例如在登录按钮处:
myViewModel.ip_string = xxx;
myViewModel.port_string = xxx;
这样就可以了,我们就不用在java 程序中单独创建String 用来存储这些变量,统一写到这个ViewModel
类中,进行存储和管理。
这个方法可以很好的代替上一节中的Android >> 11. 屏幕方向以及UI 界面状态的保存