j简介: ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续存在。Android 框架可以管理界面控制器(如 Activity 和 Fragment)的生命周期。Android 框架可能会决定销毁或重新创建界面控制器,以响应完全不受您控制的某些用户操作或设备事件。
1 还是需要我们引入AndroidX
2 引入ViewModel依赖
def lifecycle_version = "2.2.0"
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
具体版本可以自己去官网查看
3 新建自己的ViewModel
public class MyViewModel extends ViewModel {
private int number=0;
public int getNumber() {
return number;
}
}
4 再activity 中新建我们的ViewModel对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyViewModel model = new ViewModelProvider(this).get(MyViewModel.class);
//通过mode获取数据
int n= model.getNumber();//这里是否感觉像我们自己封装的数据层一样
}
这其实就是我们的ViewModel的基本用法了 其实就是封装的数据层
简介 :LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。
如果观察者(由 Observer 类表示)的生命周期处于 STARTED 或 RESUMED 状态,则 LiveData 会认为该观察者处于活跃状态。LiveData 只会将更新通知给活跃的观察者。为观察 LiveData 对象而注册的非活跃观察者不会收到更改通知。
1 还是依赖的androidX
2 引入LiveData 依赖
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
3 LiveData 配合ViewModel使用 修改上面的ViewModel
public class MyViewModel extends ViewModel {
//将数据包装成我们的LiveData处理的形式
private MutableLiveData number;
public MutableLiveData getNumber() {
if (number==null){
number= new MutableLiveData<>();
number .setValue(0);
}
return number;
}
}
其实就是数据用MutableLiveData包装下
4 修改activity类里面数据的监听不需要我们自己在数据改变时候去手动刷新Ui
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyViewModel model = new ViewModelProvider(this).get(MyViewModel.class);
//这里就是我们的LiveData的用处 监听我们数据的改变 来在onChanged方法中修改我们的数据
model.getNumber().observe(this, new Observer() {
@Override
public void onChanged(Integer integer) {
}
});
}
简介 :数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。
更加简洁我们activity里面关于View的处理
1 配置DataBinding
在module 的gradle 下配置以下
dataBinding {
enabled = true
}
2 在我们的布局xml中 在根目录下点击问好修改成我们的DataBinding模式的布局
在data标签中添加variable标签 用name标签起一个下面的type类型的变量名
具体使用规则可以去官网查看 下面只是几个基本用法
3 修改我们的activity中的用法
//ActivityViewModelBinding 这个类型会根据你的布局文件自动生成 |名字和布局文件名相同
private ActivityViewModelBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding=DataBindingUtil.setContentView(this,R.layout.activity_view_model);
MyViewModel model = new ViewModelProvider(this).get(MyViewModel.class);
binding.setData(model);
binding.setLifecycleOwner(this);
}
这里就基本用法就这样 将tLifecycle ,ViewModel,LiveData,DataBinding 结合使用。