• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

JetpackViewModel

android 搞代码 4年前 (2022-03-02) 21次浏览 已收录 0个评论
文章目录[隐藏]

前言

  • 参考于大佬BiliBili longway777的视频:https://space.bilibili.com/13…

ViewModel

介绍

ViewModel是JetPack里面的一个内容,属于Architecture里面的内容

顾名思义,作用是把数据从视图里面独立出来单独管理,从而使控制器(Activity或者Fragment)变得更加简单

ViewModel的职责应该是用来管理界面的数据,而数据的获取也不应当放到ViewModel里面

除此之外还有一个特性,就是当Activity被摧毁的时候让数据不会丢失

比如对于我们的屏幕翻转之后,数据是不会丢失的,那么我们就不用使用onSaveInstanceState来进行手动存储了

那么ViewModel配合的组件还有一个叫做LiveData的东西,两者配合将会实现对数据的监听

ViewModel还可以配合Room(使用SQLite的中间件)来进行数据的存储

所以ViewModel是非常有用的

起步

创建一个新的项目,因为要是用Jetpack这个库,所以要勾选上

但是在android最新版,默认已经勾选上了这个库,所以不用担心

布局

新建一个类叫做MyViewModel,为了省力,就直接声明为public,继承ViewModel

<code class="java">import androidx.lifecycle.ViewModel;

public class MyViewModel extends ViewModel {

    public int number = 0;
}

MainActivity

<code class="java">package com.bean;

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 {

    MyViewModel viewModel;
    TextView viewModelText;
    Button addOne,addTwo;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        viewModelText = findViewById(R.id.viewModel);
        addOne = findViewById(R.id.addOne);
        addTwo = findViewById(R.id.addTwo);

        //工厂模式生成一个新的viewModel
        ViewModelProvider.Factory factory = ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication());

        //第一个参数的意思是在什么范围内,这里传递的activity,就是在这个activity里面
        ViewModelProvider viewModelProvider = new ViewModelProvider(this,factory);

        viewModel = viewModelProvider.get(MyViewModel.class);

        //我们的ViewModel会自动将数值存储,屏幕翻转之后会直接取得
        viewModelText.setText(String.valueOf(viewModel.number));

        addOne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewModel.number++;
                viewModelText.setText(viewModel.number+"");
            }
        });

        addTwo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewModel.number+=2;
                viewModelText.setText(viewModel.number+"");
            }
        });

    }
}

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:JetpackViewModel

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址