Android项目基本架构(四) DataBinding

Android项目基本架构(四) DataBinding_第1张图片
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 
                      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 {
    
              @Override
              protected void onCreate(Bundle savedInstanceState) {
                      super.onCreate(savedInstanceState);
                      setConvertView(R.layout.activity_main);
    
                      mBinding.tv.setText("DataBinding!"); 
              }
    
      }

你可能感兴趣的:(Android项目基本架构(四) DataBinding)