LiveData是一个数据持有类,他可以通过观察者被其他组件观察其变更
imageimage
生命周期
ViewModel的声明周期依赖于Activiy或者Fragment,会在onCreate的时候创建ViewModel,ViewModel的生命周期一直持续到Activity最终销毁或Frament最终detached,期间由于屏幕旋转等配置变化引起的Activity销毁重建并不会导致ViewModel重建。
导入
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
实例:
MainActivity.java:
button = findViewById(R.id.button);
textView = findViewById(R.id.textView);
seekBar = findViewById(R.id.seekBar);
button.setOnClickListener(this);
myViewModel = new MyViewModel();
//创建时关联Activity视图
myViewModel = ViewModelProviders.of(this)
.get(MyViewModel.class);
//注册观察者
//法一
myViewModel.getData().observe(this, new Observer<User>() {
@Override
public void onChanged(User user) {
textView.setText(user.getName());
textView.setText(user.getAge()+"");
}
});
//法二 lamuda表达式
// myViewModel.getData().observe(this,obj->seekBar.setProgress(Integer.parseInt(obj.getAge())));
myViewModel.getData().observe(this, new Observer<User>() {
@Override
public void onChanged(User user) {
seekBar.setProgress(Integer.parseInt(user.getAge()));
}
});
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.button:
User user=new User();
user.setName("Sun");
user.setAge("80");
myViewModel.setUser(user);
}
}
新建一个MyViewModel类,并继承ViewModel:
public class MyViewModel extends ViewModel {
private MutableLiveData<User> data;
public MyViewModel() {
data = new MutableLiveData<User>();
}
public MutableLiveData<User> getData() {
return data;
}
//增加数据变动
public void setUser(User user) {
data.setValue(user);
}
}
建立一个User实体类:
private String name;
private String age;
7efdc81fd03c710a04ca78dc25ee444.jpg
网友评论