Android MVVM + DataBinding的开发框架

1.mvc,mvp,mvvm

  • 前面讲了mvc和mvp的框架及其优缺点,如果说mvp是mvc的升级版,那mvvm算是mvp的升级版.但是databinding,绝对是一个程序员梦寐以求的框架,再也不用写findViewById了,听着是不是很兴奋.

2. 神作databinding

  1. 废话不讲了,直接开始,感受神作的魅力
  2. 先看看以前的写法
  3. 再看看databinding的写法

3 总结

  • 优势
  1. Activity/Fragment代码量减少(提高开发效率,尤其是findViewById)
  2. databinding可以判断null值,不会报空指针
  3. 在布局中可以进行简单的表达式,减少java逻辑代码
  4. 0反射,全部在编译时期运行,不影响程序运行,性能超过手写代码
  5. 自动检测空指针,避免crash
  • 劣势
  1. ide支持不完善,有时候需要build一下,建议一起把ide升级到最新,我也不是最新的
  2. 错误查找不方便

4 DataBinding简单教程

  • 在app的build.gradle中添加
android {
    ...
    dataBinding {
        enabled = true
    }
}
  • 修改布局xml文件



    
         //数据部分
    

    
        //布局部分
    


  • 在activity中添加代码,binding xml文件
    private ActivityLoginOutBinding activityLoginOutBinding;
    //onCreate
    activityLoginOutBinding = DataBindingUtil.setContentView(this, R.layout.activity_login_out);
  • databinding的使用
    

        

        

    

    
         
        //binding属性, @={loginoutvm.username}表示数据ui双向绑定,ui变->数据变,数据变->ui变
        //@{loginoutvm.username} ui数据单向绑定, 数据变->ui变
        
        //binding方法
        
  • databinding处理步骤
    开始编译->处理layout文件->解析表达式->java编译->解析依赖->找到setter函数
    并且databinding会缓存表达式,减少表达式的计算
    只操作一遍findViewById
    利用标记来更新数据,减少数据更新频率
  • databinding支持的表达式
  1. 数学表达式: + - / * %
  2. 字符串拼接 +
  3. 逻辑表达式 && ||
  4. 位操作符 & | ^
  5. 一元操作符 + - ! ~
  6. 位移操作符 >> >>> <<
  7. 比较操作符 == > < >= <=
  8. instanceof
  9. 分组操作符 ()
  10. 字面量 - character, String, numeric, null
  11. 强转、方法调用
  12. 字段访问
  13. 数组访问 []
  14. 三元操作符 ?:
  15. 聚合判断(Null Coalescing Operator)语法 ‘??’
    虽然支持这么多运算符,但还是建议,稍微复杂点的不要放在xml里进行
  • databinding支持include
    支持
        

            

            
        

不支持

        
            

            
        
  • databinding支持动画过度
activityLoginOutBinding.addOnRebindCallback(new OnRebindCallback() {

            @Override
            public boolean onPreBind(ViewDataBinding binding) {
                ViewGroup viewGroup = (ViewGroup) binding.getRoot();
                TransitionManager.beginDelayedTransition(viewGroup);
                return true;
            }
        });
  • databinding还支持List和Map

    
    
    
    

*Note: Android Studio does not yet handle imports so the autocomplete for imported variables may not work in your IDE. Your application will still compile fine and you can work around the IDE issue by using fully qualified names in your variable definitions.*
当使用List时候,ide会显示红色,但是能编译,这个是google官网给出的解释

你可能感兴趣的:(Android MVVM + DataBinding的开发框架)