07-02 03:26
Notice
Recent Posts
Recent Comments
07-02 03:26
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

pear

[android]data binding 3 - Two-way data binding & BindingAdapter example EditText 본문

android/kotlin

[android]data binding 3 - Two-way data binding & BindingAdapter example EditText

pearlab 2023. 6. 1. 16:41

ViewModel

class ViewModel() : ViewModel() {

 

//EditText support String simple
    private val _text = MutableLiveData(String)
    val text: LiveData = _text

 

//EditText not support Int need BindingAdapter

    private val _num = MutableLiveData(String)
    val num: LiveData = _num

 

 

layout

    <data>
        <variable
            name="viewmodel"
            type="com.test.test.ViewModel" />
    </data>

<androidx.constraintlayout.widget.ConstraintLayout
...

//one way '{data}'

                    <EditText
                        android:text='@{viewmodel.text}'
                    />
//two way insert `={data}'
                    <EditText
                        android:text='@={viewmodel.text}'
                    />

//two way & BindingAdapter

                   <EditText

                         android:text='@={viewmodel.num}'
                    />

 

 

BindingAdapter

// object name is user define

object EditTextDataBindingAdapter{

 

//one way BindingAdapter send view

//need to static
    @JvmStatic

//binding target "android:text"

    @BindingAdapter("android:text")

// function name is user define

    fun setText(view: TextView, text: Int)

   {
        view.text = text.toString()
    }

 

//tow way BindingAdapter from view
    @JvmStatic

//binding target event = attribute = "android:text", event = "android:textAttrChanged")
    @InverseBindingAdapter(attribute = "android:text", event = "android:textAttrChanged")
    fun getText(view: TextView): Int {
        return view.text.toString().toIntOrNull() ?: 0
    }
}

 

//if need more type BindingAdapter  then make at tanother object  

//because error conflicting overloads

object EditTextDataBindingAdapter2{

 

}