Android Jetpack ViewModel管理数据

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值