Data Binding Library—基本使用
2019-01-18 本文已影响12人
粉色小猫与蓝色小妖
1.编译配置
在app模块的build.gradle增加dataBinding
android {
...
dataBinding {
enabled = true
}
}
2.Layouts 和绑定表达式(Layouts and binding expressions)
Data binding layout与通常所用的文件有些差别,根标签是layout ,然后是data 和view 根元素。这个view 根元素就是通常用的layout
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="user"
type="com.caicai.databinding.User"/>
</data>
<!-- UI 布局根元素 -->
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintLeft_toRightOf="@+id/gender"
/>
<TextView
android:id="@+id/gender"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toRightOf="@id/name"
app:layout_constraintRight_toRightOf="parent"
android:text="@{user.gender > 0 ?@string/female: @string/male}"
/>
</android.support.constraint.ConstraintLayout>
</layout>
android:text="@{user.name}"
表达式Data binding库根据 user.getName()
的返回值类型找setText(arg)
方法。如果返回值是String类型,就会找到接收String参数的setText()
方法;如果返回int类型,就会找到接收int 参数的setText()
方法。所以表达式必须要返回正确的类型。
3.数据(Data object)
package com.caicai.databinding;
public class User {
private String name;
private int gender;
public String getName() {
return name;
}
public int getGender() {
return gender;
}
public User(String name, int gender) {
this.name = name;
this.gender = gender;
}
}
4.绑定数据(Binding data)
每一个layout文件都会生成一个binding 类。类的名称是根据layout的名字转换并添加Binding前缀:如activity_main.xml,生成的类是ActivityMainBinding。
推荐初始化layout的时候创建绑定,如下所示:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
User user = new User("pinkcat", 1);
binding.setUser(user);
}
}