参考文章:
2.Google官方推出的Android架构组件系列文章(四)LiveData
注:本本章暂时只做简单的使用介绍,不作原理探究
使用方法
1.导入依赖
implementation 'android.arch.persistence.room:runtime:1.1.1'
annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'
implementation 'android.arch.lifecycle:extensions:1.1.1'
annotationProcessor 'android.arch.lifecycle:compiler:1.1.1'
2.使用LiveData有两种方法
方法一
a.创建一个数据类继承ViewModel
/**
* description:创建数据类
* 1.创建一个数据类继承ViewModel
* 2.在类中声明MutableLiveData<T>的属性
* 3.对属性设置get方法
* @author:mick
* @time:2018/11/16
*/
public class UserInfModel extends ViewModel {
MutableLiveData<String> mUserName;
public MutableLiveData<String> getUserName() {
if (mUserName == null) {
mUserName = new MutableLiveData<>();
}
return mUserName;
}
}
b.在activity中使用
private UserInfModel mUserInfModel;
//1初始化数据类
mUserInfModel = ViewModelProviders.of(this).get(UserInfModel.class);
//2.设置观察者
mUserInfModel.getUserName().observe(this,new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
//在这里执行数据类中数据改变的操作
tv_show.setText(s);
}
});
//3.改变数据
findViewById(R.id.btn_change).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mUserInfModel.getUserName().setValue("我是改变之后的民办自");
}
});
方法二
a.创建数据类
/**
* description:
* 1.创建数据类继承LiveData<T>
*
*
* @author:mick
* @time:2018/11/16
*/
public class UserInfoModelString extends LiveData<String> {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
//这里条用setvalue是为了让观察者接收到消息执行onchange方法
setValue(name);
}
// 此方法是当处于激活状态的observer个数从0到1时,该方法会被调用。
@Override
protected void onActive() {
super.onActive();
}
//此方法是当处于激活状态的observer个数从1变为0时,该方法会被调用。
@Override
protected void onInactive() {
super.onInactive();
}
}
b.在activiy中使用
private UserInfoModelString mUserInfoModelString;
//1.初始化数据类
mUserInfoModelString = new UserInfoModelString();
//2.设置观察者
mUserInfoModelString.observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
//这里是值改变后执行的方法
tv_show.setText(s);
}
});
//3.改变值
findViewById(R.id.btn_change).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mUserInfoModelString.setName("我是改变之后的值");
}
});
3.LiveData的变换
待续.......