简介
ViewModel中的数据会一直存活,即使activity configuration发生变化,例如屏幕发生旋转或者是切换语言
以下是ViewModel的作用范围:
此图引用自B站UP主 ongway777视频
image.png
可以看到只要不是真正被销毁,ViewModel就会一直存在
使用
- 首先需要创建一个类,继承
ViewModel
类,这里就简单保存一个数
public class MyViewModel extends ViewModel {
private int num;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
-
在Activity中创建ViewModel
viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
这里androidx.lifecycle.ViewModelProviders
需要手动添加依赖,用快捷键即可 -
写一个点击事件显示内容到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()));
}
});
}
}
网友评论