欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android Jetpack ViewModel管理数据

程序员文章站 2022-06-09 23:51:04
...

用Jetpack中的ViewModel管理数据

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


实现效果:
Android Jetpack ViewModel管理数据

1.创建ViewModel类

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

(1)用ViewModel管理数据

Android Jetpack 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键暂停应用时,数据不丢失。

相关标签: Android