1、创建一个类:继承ViewModel
public class MyViewModel extends ViewModel {
private MutableLiveData<String> name;
public LiveData<String> getName(){
//这里要判断name是否为空,如果空就要new一个LiveData并返回
if(name == null){
name = new MutableLiveData<String>();
}
return name;
}
public void setName(String name){
this.name.setValue(name);
}
}
2、在Activity中使用:
public class MainActivity extends AppCompatActivity {
private TextView tvName;
private Button button;
private MyViewModel model;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvName = findViewById(R.id.textview);
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String Name = "abao";
model.setName(Name);
}
});
//获取model
model = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory())
.get(MyViewModel.class);
//注册观察者,观察数据变化,变化时候更新UI.
//普通写法:
// model.getName().observe(this, new Observer<String>() {
// @Override
// public void onChanged(String s) {
//更新UI
// tvName.setText(s);
// }
// });
//lambda写法:
model.getName().observe(this, s -> {
//更新UI
tvName.setText(s);
});
}
}
3、ViewModel的生命周期
ViewModel
对象存在的时间范围是获取 ViewModel
时传递给 ViewModelProvider
的 Lifecycle
。ViewModel
将一直留在内存中,直到限定其存在时间范围的 Lifecycle
永久消失:对于 activity,是在 activity 完成时;而对于 fragment,是在 fragment 分离时。
下图是Activity经过屏幕旋转后结束时所处的生命周期,右边是ViewModel的生命周期。
- 通常在系统首次调用Activity的onCreater()方法是获取ViewModel。系统可能会在activity的整个生命周期内多次调用onCreater(),如在旋转屏幕时。ViewModel存在的时间范围是首次请求ViewModel直到activity 结束并且销毁。