关于ViewModel的初步理解

Android开发JetPack中的ViewModel

  • 先看一下开发者文档的介绍
    • 示例
      • 设计界面
      • 创建ViewModel类
      • 在MainActivity.java中定义ViewModel对象
      • 效果预览图

本文为学习类文档,通过学习B站up主longway777的视频, link.如有侵权,请联系博主进行删除

先看一下开发者文档的介绍

ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续存在。
简而言之一句话就是:
让Activity管界面,ViewModel管数据,且在翻转屏幕或者改变系统语言时数据不丢失

示例

创建一个新的项目,新版AS是默认使用Androidx的,旧版需要手动勾选关于ViewModel的初步理解_第1张图片

设计界面

设置一个文本框,两个按钮(分别为+1,-1),通过点击按钮,实现文本框内容的数字加减操作。
关于ViewModel的初步理解_第2张图片

创建ViewModel类

在包名处创建一个类,名为NumberViewModel,继承ViewModel类
关于ViewModel的初步理解_第3张图片
并在ViewModel中管理我们将要操作的数字,并声明为public

package com.example.viewmodeldemo;

import androidx.lifecycle.ViewModel;

public class NumberViewModel extends ViewModel {
    public int number;
}

在MainActivity.java中定义ViewModel对象

此处发现一个问题——新版的jetpack已经将ViewModelProviders弃用
关于ViewModel的初步理解_第4张图片
numberViewModel = ViewModelProviders.of(this).get(NumberViewModel.class);

因此查阅开发者文档查找新的方法,功夫不负有心人,查到新版使用方法

  1. 首先在build.gradle(Module:app)中添加依赖
dependencies {
   implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
}
  1. 在此粘贴使用方法
numberViewModel = new ViewModelProvider(this).get(NumberViewModel.class);

此处粘贴全部代码

package com.example.viewmodeldemo;

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    NumberViewModel numberViewModel;
    TextView textView_showNumber;
    Button button_add,button_minus

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        numberViewModel = new ViewModelProvider(this).get(NumberViewModel.class);

        textView_showNumber = findViewById(R.id.textView_showNumber);
        button_add = findViewById(R.id.button_add);
        button_minus = findViewById(R.id.button_minus);
        textView_showNumber.setText(String.valueOf(numberViewModel.number));   //onCreate()时显示界面数字

        button_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                numberViewModel.number++;   //+1
                textView_showNumber.setText(String.valueOf(numberViewModel.number));//刷新界面
            }
        });

        button_minus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                numberViewModel.number--;   //-1
                textView_showNumber.setText(String.valueOf(numberViewModel.number));//刷新界面
            }
        });
    }
}

效果预览图

运行项目之后,点击按钮观察界面实现,加与减的操作
关于ViewModel的初步理解_第5张图片

关于ViewModel的初步理解_第6张图片

翻转屏幕后数据也不会消除

关于ViewModel的初步理解_第7张图片
至此项目完成,代码很简单,因此不粘贴源码,快去试试吧!

你可能感兴趣的:(关于ViewModel的初步理解)