demo理解jetpack中的Databindding等框架

参考文章:
Android DataBinding 从入门到进阶
Databinding与LiveData的合作
Android Navigation 如何动态的更换StartDestination &&保存Fra
理解MVVM中的view-bindding和databindding
Databindding中String字符串的语法操作集合

最近项目中要用Databindding做MVVM结构,所以趁有时间写了一个demo熟悉Databindding中的一些入门和进阶和细节东西主要包括navigation,viewmodel,livdata,Databindding这几个jetpack框架中的,主要参考了动脑的视频和第二篇文章下面把一些demo的框架和重点整理如下,方便后续查看。

  1. demo使用了as的底部tab工程框架,也就不需要自己再去开发就可以了解到navigation的使用,确实方便不少比以前viewpager+fragment方便很多,不太好的是navigation导航页面会重走fragment的生命周期,第三篇文章也给到了对应的解释和优化方法。
  2. viewmodel和livedata此处就不做过多解释,主要是对Databindding的整理:
    • Databindding的使用(databindding和viewbindding的区别可以参考第四篇文章)
    • Databindding 单项数据绑定包括声明数据对象继承BaseObserval修改get和set api 和系统封装的Observable系列对象实现单项数据绑定。
    • Databindding 双向数据绑定需要注意利用setLifecycleOwner实现数据和view的监听的生命周期,数据的生命周期是那般就设置为那般。
    • 事件监听绑定
    • 引入类使用类的属性和api方法
    • 在xml布局文件中即Databindding@{}中使用各种运算符,包括基本运算符和三目运算符等等,具体可以参考第二篇文章
    • Databindding中支持判空实现即??运算符的实现
    • Databindding支持引入view后直接进行view的属性控制 比如visible等
    • Databindding对于数据会赋值默认值 string赋值null int默认赋值0
    • Databindding支持include和viewstub的用法借助于bind命名空间实现数据的对应绑定
    • 使用bindAdapter可以扩展布局view的属性,比如Image直接加载网络图片,textview加载text时做正则校验等。
    • 使用BindingConversion实现@{}中字符串的转换还有就是可以实现数据的类型转换,比如string类型转为int(color的转换),res数据的常规转换等。
    • Databindding中可以直接使用list/set/map/array等常见的java集合数据结构和Android独有的数据结构,用法和常规类的引入一致,需要注意的是除了引入对应的类外还需要声明对应的index/key来访问集合的单个item数据
      • Databindding支持在@{}中直接使用res内中的资源。
      • 后续功能待开发中。。。。

2.设置当前的Databindding的生命周期归属

  1. 设置当前的viewmodel中数据双向绑定不依赖于Observer 普通字段也可以在设置的生命周期内自动更新UI(个人理解还需要后续验证)
  2. 理解viewmodel和AndroidViewModel?
    • AndroidViewModel 系统提供直接实现了viewmodel接口
    • 功能上添加了application对象的持有(仅添加这一个功能)
    • 持有了application对象即可以访问上下文资源。
    • 使用时可以直接继承AndroidViewModel,在activity/fragment中获取的时候需要使用下面代码先绑定对应的application再获取对应的viewmodel对象即:
new ViewModelProvider(this,new ViewModelProvider.
AndroidViewModelFactory(getApplication()))

你可能感兴趣的:(demo理解jetpack中的Databindding等框架)