-
[Android] [Kotlin] addTextChangedListener와 setOnFocusChangeListener의 차이 (EditText 입력 변화 이벤트 처리)안드로이드 2024. 4. 2. 20:55
✏️ TIL(Today I Learned)
EditText 입력 변화 이벤트 처리에 사용되는
addTextChangedListener와 setOnFocusChangeListener의 차이에 대해서 공부했다.
addTextChangedListener는 EditText에서 텍스트가 변경될 때마다 호출되는 리스너를 설정하는 메소드이다.
사용자가 EditText에 텍스트를 입력하거나 수정할 때마다 호출된다.
따라서, 텍스트의 변화에 반응하여 실시간으로 검증이나 처리를 수행하는 데 사용된다.
예를 들어, 실시간으로 입력한 텍스트의 길이를 체크하거나 특정 형식에 맞는지 검증할 때 사용한다.
setOnFocusChangeListener는 뷰의 포커스가 변경될 때 호출되는 리스너를 설정하는 메소드이다.
이 리스너는 사용자가 뷰를 포커스하거나 포커스를 잃을 때 호출된다.
사용자가 입력 필드에 포커스를 주거나 빼면, 해당 입력 필드에 대한 다른 동작을 수행하거나 UI를 업데이트할 때 사용한다.
예를 들어, 사용자가 입력 필드에 포커스를 주면 힌트 텍스트를 변경하거나, 포커스를 잃으면 입력 필드의 유효성을 검사하고 오류 메시지를 표시할 때 사용한다.
addTextChangedListener 사용
editTextList.forEach { editText -> editText.addTextChangedListener { when (editText) { nameEt -> viewModel.setName(it.toString()) idEt -> viewModel.setId(it.toString()) pwdEt -> viewModel.setPassword(it.toString()) pwdcheckEt -> viewModel.setPasswordCheck(it.toString()) } } }
addTextChangedListener는 EditText에서 텍스트가 변경될 때마다 호출되기 때문에
실시간으로 입력한 텍스트 값이 LiveData에 값이 담기게 된다.
따라서 observe중인 LiveData가 조건에 만족하자마자, 아래의 텍스트뷰의 visibility가 Gone이 된다.
setOnFocusChangeListener 사용
editTextList.forEach { editText -> editText.setOnFocusChangeListener { view, hasFocus -> if (!hasFocus) { // 포커스를 잃은 경우에만 처리 val text = (view as EditText).text.toString() when (view) { nameEt -> viewModel.setName(text) idEt -> viewModel.setId(text) pwdEt -> viewModel.setPassword(text) pwdcheckEt -> viewModel.setPasswordCheck(text) } } } }
setOnFocusChangeListener 는 뷰의 포커스가 변경될 때 호출되기 때문에
다른 EditText로 포커스가 옮겨졌을 때에 LiveData에 값이 담기게 된다.
실시간으로 입력한 텍스트 값이 만족하지 않아도, 바로 텍스트뷰의 visibility가 VISIBLE이 되지 않는다.
포커스(커서)가 옮겨져야 LiveData에 값이 담기기 때문이다.
정리하자면, addTextChangedListener는 실시간 텍스트 입력에 반응하는 처리를 수행할 때 사용하고,
setOnFocusChangeListener는 포커스 변경에 반응하는 처리를 수행하는 데 사용하면 된다.
'안드로이드' 카테고리의 다른 글
[Android] [인스타그램 클론 코딩] 갤러리 접근 허용 & 사진 이미지 뷰에 등록 (registerForActivityResult() 사용) (1) 2024.04.03 [Android] Dark theme 구현 (다크 모드 전용 리소스 정의) (0) 2024.04.03 [Android] [인스타그램 클론 코딩] 스토리 UI 만들기 (원형 이미지 뷰: CircleImageView) (0) 2024.04.02 [Android] 회원가입시 LiveData 사용한 비밀번호 유효성 검사 (ViewModel/ Pattern, Matcher 정규식) (0) 2024.03.29 [Android] ViewModel의 생성과 Lifecycle 생명주기 (0) 2024.03.29