ViewModel

作者: 禄眠 | 来源:发表于2019-11-05 13:41 被阅读0次

简介

ViewModel中的数据会一直存活,即使activity configuration发生变化,例如屏幕发生旋转或者是切换语言
以下是ViewModel的作用范围:

此图引用自B站UP主 ongway777视频

image.png

可以看到只要不是真正被销毁,ViewModel就会一直存在

使用

  1. 首先需要创建一个类,继承ViewModel类,这里就简单保存一个数
public class MyViewModel extends ViewModel {

    private int num;

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }
}
  1. 在Activity中创建ViewModel
    viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
    这里androidx.lifecycle.ViewModelProviders需要手动添加依赖,用快捷键即可

  2. 写一个点击事件显示内容到TextView,并保存数据到ViewModel

addBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        viewModel.setNum(viewModel.getNum() + 1);
        textView.setText(String.valueOf(viewModel.getNum()));
    }
});

同理我们还需要在onCreate()中从ViewModel中取值并赋值给TextView,这样才能在Activity重新创建时恢复原样
textView.setText(String.valueOf(viewModel.getNum()));

MainActivity完整代码:

package com.example.viewmodeldemo;

import androidx.appcompat.app.AppCompatActivity;

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

import androidx.lifecycle.ViewModelProviders;

public class MainActivity extends AppCompatActivity {

    TextView textView;
    Button addBtn;
    MyViewModel viewModel;

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

        textView = findViewById(R.id.textView);
        addBtn = findViewById(R.id.button);

        viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
        textView.setText(String.valueOf(viewModel.getNum()));

        addBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewModel.setNum(viewModel.getNum() + 1);
                textView.setText(String.valueOf(viewModel.getNum()));

            }
        });
    }
}

相关文章

网友评论

      本文标题:ViewModel

      本文链接:https://www.haomeiwen.com/subject/xhhsbctx.html