Прост в использовании
Добавлены в build.gradle модули, которым необходимо использовать DataBinding
android {
//...
defaultConfig {
//...
dataBinding{
enabled true
}
}
}
Тогда синхронизируйте
Создайте новый BaseObservable
класс, унаследованный от
public class User extends BaseObservable {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
@Bindable
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
notifyPropertyChanged(com.wangyz.jetpack.BR.name);
}
@Bindable
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
notifyPropertyChanged(com.wangyz.jetpack.BR.age);
}
}
get
Добавьте @Bindable
аннотации к методам полей, которые необходимо связать, и добавьте их в метод setnotifyPropertyChanged(com.wangyz.jetpack.BR.name)
построить проект
Создайте новый файл макета, щелкните самый внешний узел макета alt+enter
, выберите из всплывающих параметров, Convert to data binding layout
и макет будет преобразован в макет в формате DataBinding.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="com.wangyz.jetpack.databinding.User" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:onClick="update"
android:text="更新"
android:layout_width="match_parent"
android:layout_height="50dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:text="@{user.name}" />
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:text="@{String.valueOf(user.age)}" />
</LinearLayout>
</layout>
Преобразованный макет будет layout
самым внешним узлом, а data
узел будет добавлен внутрь . Нам нужно добавить variable
узлы к этому узлу данных , а также настроить name
и type
присвоить им атрибуты. Имя произвольно, а тип вводится в ранее определенный User
класс.
Для свойств @{user.name}
элемента управления, которые необходимо связать, таких как назначение текста , это означает присвоение текстового атрибута имени ранее привязанного класса User. Таким образом, при изменении имени пользователя текстовое свойство элемента управления автоматически изменится.
Привязать пользователя и макет в действии
public class DataBindingActivity extends AppCompatActivity {
User user;
ActivityDatabindingBinding binding;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_databinding);
user = new User("张三", 18);
binding.setUser(user);
}
public void update(View view) {
user.setName(user.getName() + "$");
user.setAge(user.getAge() + 1);
binding.setVariable(com.wangyz.jetpack.BR.user, user);
}
}
Путем DataBindingUtil.setContentView(this, R.layout.activity_databinding)
привязки и возврата Binding
, а затем с помощью setUser
метода Binding вы можете установить данные для макета.