用Jetpack中的ViewModel管理数据

ViewModel是属于Android的Jetpack库里的一个类
创建项目时要先勾选 use androidx.* artifacts (现在已经必选)


实现效果:

1.创建ViewModel类

在MainActivity.java相同路径下新建java class
Superclass(继承于):androidx.lifecycle.ViewModel

(1)用ViewModel管理数据

(2)在MainActivity.java中关联控件和ViewModel类

  1. 通过ViewModelProviders.of(this).get(MyViewModel.class)创建一个ViewModel对象

ViewModelProviders导入:ViewModelProviders方法已弃用,先输入ViewModelProviders,依靠红色提示依次添加依赖,导入类


  1. 初始化界面
textView.setText(String.valueOf(myViewModel.number));
  1. 关联其余控件,设定点击事件等
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键暂停应用时,数据不丢失。

更多相关文章

  1. Android之Sqlite模糊查询
  2. 基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据
  3. 如何POST一个JSON格式的数据给Restful服务
  4. Android中SQLiteOpenHelper类的onUpgrade方法的作用
  5. Android中Http请求
  6. Android(安卓)短信数据库详细总结分析
  7. Android中的数据结构解析(四)SparseArray和ArrayMap
  8. Android(安卓)之 ContentProvider 共享数据库-通讯录
  9. mybatisplus的坑 insert标签insert into select无参数问题的解决

随机推荐

  1. Mysql服务器的安装配置与启动关闭方法详
  2. MySQL 8.0 可以操作 JSON 了
  3. MYSQL存储过程 注释详解
  4. MySQL命令提示符出现输入错误时如何修改
  5. 关于MySQL实现指定编码遇到的坑
  6. 为什么MySQL 删除表数据 磁盘空间还一直
  7. mysql中int(3)和int(10)的数值范围是否相
  8. 深入解析MySQL索引数据结构
  9. MySQL数据库必备之条件查询语句
  10. MySQL实例精讲单行函数以及字符数学日期