DataBinding的使用
一、使用方法
1.在Module的build.gradle文件下的android中添加:
dataBinding {
enabled = true
}
注意:使用到的xml资源有使用DataBinding的,其所在的Module都要添加,如果是子组件Module使用了DataBinding,那主组件一定要添加上面的引用,不然会报错:
App Crash: Failed resolution of: Landroid/databinding/DataBinderMapperImpl;
Module中使用DataBinding有个大坑,如果Module的包名是程序包名+模块名称的形式的话,会导致module中生成的的布局文件的DataBindingImpl文件被放到app组件那边去,然后在module中找不到,使得DataBindingUtil.setContentView返回的对象为null.
2. 在布局文件(XML)中的使用
使用<layout></layout>
标签将布局文件包括起来。
例:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="result"
type="String" />
</data>
<android.support.constraint.ConstraintLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="0dp"
android:layout_height="50dp"
android:text="@{result}"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
</android.support.constraint.ConstraintLayout>
</layout>
需要绑定的数据和方法使用<data></data>
来包含,具体的内容则使用<variable/>
来添加。
3.在Activity中的使用
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setResult("示例");
}
}