| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
- ndkVersion
 - Android
 - BindingAdapter
 - ChatGPT
 - 청약
 - gradle
 - 새마을금고
 - 용산 호반써밋 에이디션
 - ios
 - Mac
 - JetPack
 - 예금
 - kotlin
 - audio record
 - ndk r24
 - 사전청약
 - Android Studio
 - CHAT GPT
 - KB
 - 고금리
 - arm-linux-androideabi
 - 달러예금
 - EditText
 - Andorid
 - MG더뱅킹정기예금
 - java
 - RETROFIT
 - 3rd framework
 - Swift
 - Data Binding
 
- Today
 
- Total
 
pear
[android]data binding 3 - Two-way data binding & BindingAdapter example EditText 본문
[android]data binding 3 - Two-way data binding & BindingAdapter example EditText
pearlab 2023. 6. 1. 16:41ViewModel
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{
}
'android > kotlin' 카테고리의 다른 글
| [android]data binding 5 - mistake error (0) | 2023.06.01 | 
|---|---|
| [android]data binding 4 - app custom attribute (0) | 2023.06.01 | 
| [android]data binding 1 - simple example EditText (0) | 2023.06.01 | 
| [android]data binding 2 - BindingAdapter example EditText (0) | 2023.06.01 | 
| [kotlin] event interface channel 활용 (0) | 2023.05.24 |