用Jetpack中的ViewModel管理数据
ViewModel是属于Android的Jetpack库里的一个类
创建项目时要先勾选 use androidx.* artifacts (现在已经必选)
实现效果:
1.创建ViewModel类
在MainActivity.java相同路径下新建java class
Superclass(继承于):androidx.lifecycle.ViewModel
(1)用ViewModel管理数据
(2)在MainActivity.java中关联控件和ViewModel类
- 通过ViewModelProviders.of(this).get(MyViewModel.class)创建一个ViewModel对象
ViewModelProviders导入:ViewModelProviders方法已弃用,先输入ViewModelProviders,依靠红色提示依次添加依赖,导入类
- 初始化界面
textView.setText(String.valueOf(myViewModel.number));
- 关联其余控件,设定点击事件等
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myViewModel.number++; // 点击让数据+1 myViewModel.number int类型
textView.setText(String.valueOf(myViewModel.number)); // 再刷新界面
}
});
完整代码:
package com.example.viewmodeltest;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProviders;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
MyViewModel myViewModel;//声明ViewModel变量
TextView textView;
Button button1,button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 关联
myViewModel=ViewModelProviders.of(this).get(MyViewModel.class); //创建一个ViewModel对象
textView=findViewById(R.id.textView);
textView.setText(String.valueOf(myViewModel.number));
button1=findViewById(R.id.button);
button2=findViewById(R.id.button2);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myViewModel.number++; // 点击让数据+1 myViewModel.number int类型
textView.setText(String.valueOf(myViewModel.number)); // 再刷新界面
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myViewModel.number+=2;
textView.setText(String.valueOf(myViewModel.number));
}
});
}
}
通过让ViewModel管理数据,更加模块化,同时在不设置SaveIntanceState的情况下切换系统语言、翻转屏幕、home键暂停应用时,数据不丢失。