用Jetpack中的ViewModel管理数据

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


实现效果:
Android Jetpack ViewModel管理数据_第1张图片

1.创建ViewModel类

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

(1)用ViewModel管理数据

Android Jetpack ViewModel管理数据_第2张图片

(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中的数据结构解析(四)SparseArray和ArrayMap
  2. Android 之 ContentProvider 共享数据库-通讯录
  3. 如何POST一个JSON格式的数据给Restful服务
  4. android EditText控件如何禁止输入内容
  5. Android多种数据库存储方式对比
  6. 基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据
  7. Android通过selector改变界面状态
  8. [Android1.6]继承BaseAdapter为GridView设置数据时设置setLayout
  9. Android控件开发之一----TextView

随机推荐

  1. Eclipse安装Android教程
  2. Android(安卓)Makefile中是 如何识别 TAR
  3. android APP安装支持安装到SDCard
  4. [转]Android(安卓)技术专题系列之九 -- 图
  5. Android(安卓)移动平台概述
  6. android入门1:有关布局与activity数据传递
  7. Android(安卓)3D引擎汇总
  8. 【Android】Android和PHP开发最佳实践完
  9. 导入Android自带Sample工程出错解决(Erro
  10. Android中的WatchDog