프로젝트 진행 중 회원가입을 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의 결과를 얻을 수 있었다.
더 좋은 방법이 있으면 언제든 댓글 환영입니다.