前言
- 前面几篇文章,跟大家讲解了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!"); } }
网友评论