美文网首页DataBindingAndroid知识Android开发
Android项目基本架构(四) DataBinding

Android项目基本架构(四) DataBinding

作者: WangJie0822 | 来源:发表于2017-06-08 10:15 被阅读149次
    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!"); 
                }
      
        }

    相关文章

      网友评论

        本文标题:Android项目基本架构(四) DataBinding

        本文链接:https://www.haomeiwen.com/subject/xzbwnttx.html