[Android] [Jetpack] Базовое использование DataBinding

Прост в использовании

Добавлены в 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 вы можете установить данные для макета.

рекомендация

отblog.csdn.net/xfb1989/article/details/110874038