[Android/Kotlin] EditText에 DataBinding을 적용해보자

minH_·2024년 1월 18일

프로젝트 진행 중 회원가입을 Databinding을 사용하여 구현하다 문제가 발생했다.

class JoinViewModel : ViewModel() {

    private var _school = MutableLiveData<String>()
    val school: LiveData<String> = _school

    private var _year = MutableLiveData<String>()
    val year: LiveData<String> = _year

editText에 사용자가 입력한 값을 _school과 two-way Binding으로 구현하기 위해 여러 방법을 찾아봤다. 하지만 private 접근 지정자이기 때문에 대표적으로 나와있는 방법인

android:text="@={viewModel._school}"

이런 방식으로는 사용이 불가능하였다. 하지만 private을 public으로 변경하는 행위는 내 자신이 용납을 할 수 없기에.. 다른 방법을 생각해봤다.

//EditText

android:onTextChanged="@{(s, start, before, count) -> viewmodel.onSchoolTextChanged(s)}"
class JoinViewModel : ViewModel() {
    fun onSchoolTextChanged(text: CharSequence) {
            _school.value = text.toString()
        }
    }

이런 방식으로 xml에서 EditText의 값이 변경될 때 마다 함수를 호출하여 _school의 값을 변경시켜주면 내가 원하는 DataBinding의 결과를 얻을 수 있었다.

더 좋은 방법이 있으면 언제든 댓글 환영입니다.

0개의 댓글