前言
- 参考于大佬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
import androidx.lifecycle.ViewModel;
public class MyViewModel extends ViewModel {
public int number = 0;
}
MainActivity
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+"");
}
});
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。