Android项目基本架构(四) DataBinding

3776310-dd2ee365a4349210.png
image.png

前言


  • 前面几篇文章,跟大家讲解了Dagger2、Retrofit、RxJava、MVP等在项目中的运用,接下来,就要和大家说说DataBinding了。
  • 使用DataBinding,你就可以告别不断的findViewById,不用再在你的项目里加入ButerKnife,甚至是控件的id也并不是必须的了,那么怎么用呢、、、

DataBinding使用


  • 首先就是开启DataBinding功能,这个很简单,只需在你的项目Module下的build.gradle文件中配置就可以了。在android节点下加入 dataBinding{ enabled true }

    android {
        ... ...
        dataBinding { // 开启DataBinding
            enabled true
        }
    }
    
  • 关于DataBinding的详细使用我就不多说了,网上能找到很多资料,这里我推荐ConnorLin的博客,里面讲的很详细。

DataBinding的封装


  • 毕竟项目架构嘛,重点是封装,那么接下来我们就要把DataBinding加入到我们的项目中,让他更好更方便的为我们所用。

  • DataBinding为我们提供了一个DataBindingUtil工具类,这个类里面提供了很多方法给我们使用,用来生成一个DataBinding对象,官方推荐在Activity里面使用的是酱紫的:

      XxBinding binding = DataBindingUtil
                    .setContentView(activity, R.layout.xx);
    
  • 通过查看源码我发现其内部有这样的实现:

      activity.setContentView(layoutId);
    
  • 这样的话我原先设想中直接重写setContentView方法,在里面使用DataBindingUtil中的setContentView方法加载布局就无法实现了,这里会造成一个无限的递归。

  • 因此,我使用了DataBindingUtil提供的inflate方法,同样是重写BaseActivity中的setContentView方法:

      @Override
      public void setContentView(int layoutResID) {
              mBinding = DataBindingUtil.inflate(
                              LayoutInflater.from(mContext),
                              layoutResID, null, false);
              super.setContentView(mBinding.getRoot());
      }
    
  • 然后,再在BaseActivity上加上DataBinding的泛型,DataBinding的封装就完成啦

      public class BaseActivity<B extends ViewDataBinding> 
                      extends AppCompatActivity {
              protected B mBinding;
    
              @Override
              public void setContentView(int layoutResID) {
                      mBinding = DataBindingUtil.inflate(
                                      LayoutInflater.from(mContext),
                                      layoutResID, null, false);
                      super.setContentView(mBinding.getRoot());
      }
    

}

  • 使用:

      public class MainActivity extends BaseActivity<ActivityMainBinding> {
    
              @Override
              protected void onCreate(Bundle savedInstanceState) {
                      super.onCreate(savedInstanceState);
                      setConvertView(R.layout.activity_main);
    
                      mBinding.tv.setText("DataBinding!"); 
              }
    
      }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值