Android JetPack -架构组件-ViewModel,LiveData,DataBinding

ViewModel

j简介: ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续存在。Android 框架可以管理界面控制器(如 Activity 和 Fragment)的生命周期。Android 框架可能会决定销毁或重新创建界面控制器,以响应完全不受您控制的某些用户操作或设备事件。

使用方法-ViewModel

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 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。
如果观察者(由 Observer 类表示)的生命周期处于 STARTED 或 RESUMED 状态,则 LiveData 会认为该观察者处于活跃状态。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) {
                
            }
        });


    }

DataBinding

简介 :数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。
更加简洁我们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 结合使用。
  • 注意如果需要在
  • @Override
    public void onSaveInstanceState(@NonNull Bundle outState, @NonNull PersistableBundle outPersistentState) {
    super.onSaveInstanceState(outState, outPersistentState);
    }
  • 保存数据ViewModel里面也有提供对应方法 具体研究自己可以去官网查看API

你可能感兴趣的:(Android)