前言
- 前面幾篇文章叉存,跟大家講解了Dagger2、Retrofit度帮、RxJava歼捏、MVP等在項(xiàng)目中的運(yùn)用,接下來笨篷,就要和大家說說DataBinding了瞳秽。
- 使用DataBinding,你就可以告別不斷的findViewById率翅,不用再在你的項(xiàng)目里加入ButerKnife练俐,甚至是控件的id也并不是必須的了,那么怎么用呢冕臭、腺晾、、
DataBinding使用
-
首先就是開啟DataBinding功能辜贵,這個很簡單悯蝉,只需在你的項(xiàng)目Module下的build.gradle文件中配置就可以了。在android節(jié)點(diǎn)下加入 dataBinding{ enabled true }
android { ... ... dataBinding { // 開啟DataBinding enabled true } }
關(guān)于DataBinding的詳細(xì)使用我就不多說了托慨,網(wǎng)上能找到很多資料鼻由,這里我推薦ConnorLin的博客,里面講的很詳細(xì)厚棵。
DataBinding的封裝
畢竟項(xiàng)目架構(gòu)嘛蕉世,重點(diǎn)是封裝,那么接下來我們就要把DataBinding加入到我們的項(xiàng)目中婆硬,讓他更好更方便的為我們所用讨彼。
-
DataBinding為我們提供了一個DataBindingUtil工具類,這個類里面提供了很多方法給我們使用柿祈,用來生成一個DataBinding對象,官方推薦在Activity里面使用的是醬紫的:
XxBinding binding = DataBindingUtil .setContentView(activity, R.layout.xx);
-
通過查看源碼我發(fā)現(xiàn)其內(nèi)部有這樣的實(shí)現(xiàn):
activity.setContentView(layoutId);
這樣的話我原先設(shè)想中直接重寫setContentView方法,在里面使用DataBindingUtil中的setContentView方法加載布局就無法實(shí)現(xiàn)了躏嚎,這里會造成一個無限的遞歸蜜自。
-
因此,我使用了DataBindingUtil提供的inflate方法卢佣,同樣是重寫B(tài)aseActivity中的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!"); } }