[Android] DataBinding - Two-way Data Binding

ErroredPasta·2022년 5월 25일
0

Android-DataBinding

목록 보기
3/4

기존의 DataBinding은 일방적으로 변수의 값을 View에 적용하는 것이였습니다. View의 값을 DataBinding 변수에 적용하며 View에 변수의 값을 적용하는 방법도 존재합니다.

Two-way data binding

DataBinding 변수를 View에 적용시키며 변화하는 View의 값을 DataBinding변수에 적용하는 것을 two-way data binding이라고 합니다. 기존에는 DataBinding을 사용하면서 변하는 View의 값을 변수에 반영하기 위해서는 아래와 같이 값이 변할 때 동작을 정의한 method를 같이 설정해 주어야 했습니다.

<!-- one-way data binding -->
<CheckBox
    android:id="@+id/rememberMeCheckBox"
    android:checked="@{viewmodel.rememberMe}"
    android:onCheckedChanged="@{viewmodel.rememberMeChanged}"
/>

Binding expression을 기존과 약간 다르게 @={}를 사용하여 two-way data binding을 적용할 수 있습니다.

<!-- two-way data binding -->
<CheckBox
    android:id="@+id/rememberMeCheckBox"
    android:checked="@={viewmodel.rememberMe}"
/>

위와 같이 설정하게 되면 binding class를 생성시 자동으로 InverseBindingListener를 생성하여 View의 값이 변경될 때 자동으로 변수에 반영해주게 됩니다.

private androidx.databinding.InverseBindingListener mboundView1androidTextAttrChanged = new androidx.databinding.InverseBindingListener() {
    @Override
    public void onChange() {
        // Inverse of post.title
        //         is post.setTitle((java.lang.String) callbackArg_0)
        java.lang.String callbackArg_0 = androidx.databinding.adapters.TextViewBindingAdapter.getTextString(mboundView1);
        // localize variables for thread safety
        // post.title
        java.lang.String postTitle = null;
        // post
        com.example.architectureexample.data.models.post.Post post = mPost;
        // post != null
        boolean postJavaLangObjectNull = false;



        postJavaLangObjectNull = (post) != (null);
        if (postJavaLangObjectNull) {




            post.setTitle(((java.lang.String) (callbackArg_0)));
        }
    }
};

Reference

[1] "Two-way data binding," Android Developers, last modified Oct 28, 2021, accessed May 25, 2022, https://developer.android.com/topic/libraries/data-binding/two-way.

profile
Hola, Mundo

0개의 댓글