DataBinding是2016年穀歌新出的一種技術,相對當前使用較多的其他三方注入框架,DataBinding有引入簡單,操作簡單,佔用體積小的有點。這裏只是對DataBinding注入佈局的控件demo,沒有做數據的綁定。
1.引入
項目Modual.app中,在build.gradle添加
android{
...
dataBinding{
enabled true
}
}
2.佈局中使用
<?xml version="1.0" encoding="utf-8"?>
<layout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text_hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
</layout>
在佈局中操作如上,在佈局最外層嵌套議程<layout></layout>的標籤,AS就會自動幫你生成以你佈局名稱的Binding文件。如果佈局文件名字是activity_main,那麼生成的Binding文件就是ActivityMainBinding.
3.Java代碼中使用
在佈局中添加<layout>...</layout>之後,怎麼在Java中使用呢?
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = (DataBindingUtil.setContentView(this,R.layout.activity_main));
initViews();
}
private void initViews(){
binding.textHello.setText("this is a DataBinding Demo");
}
}
見代碼中,定義一個自定生成的DataBinding的對象,然後通過DataBindingUtil將DataBinding添加到Java文件中來。
然後就可以使用binding獲取在佈局文件中定義的各個控件進行操作了。使用很簡單吧。歐耶~的確是這樣
4.深化處理
如果每一個類都這樣寫,那不得累死啊。咱們做技術的需要總結共性,寫一個基類,這對於大家來講太小case了。下邊就實現一個DataBinding的基類
public abstract class BindingActivity<B extends ViewDataBinding, P extends BasePresenter> extends FragmentActivity{
protected B binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, createLayoutId());
}
protected abstract int createLayoutId();
}
好了,這個基類就包含了DataBinding的初始化操作,其他的Activity 繼承於BindingActivity就可以了。就是這麼簡單,再也不用寫那麼多煩人的控件名和findViewById()的代碼了。
5.總結
DataBinding 有其他功能,包括數據與View的綁定。DataBinding在某些特殊情況下還是不能完全替代寫View的場景。譬如在一個Adapter(有限個Item)中需要針對以某個Item中的View做處理等。
簡單demo地址如下(希望對你有幫助):
https://github.com/wzp09tjlg/2016_T_point.git