티스토리 뷰
Text Changed Listener
• 안드로이드의 EditText 위젯을 사용할 경우, EditText에서 입력되거나 변경되는 텍스트를 Text Changed Listener를 통해 코틀린으로 받아올 수 있다.
• 받아온 텍스트를 데이터로 활용할 수 있다.
• 변경되는 텍스트를 실시간으로 확인하여 올바른 형식으로 텍스트를 입력했는지 등을 확인할 수 있다.
* EditText 위젯을 다룬 게시글 : [📱Android/🔍UI] - 14. EditText
1. addTextChangedListener 사용
• EditText 클래스의 addTextChangedListener(TextWatcher) 메소드 사용
- TextWatcher 클래스의 beforeTextChanged, onTextChanged, afterTextChanged 메소드를 사용
- 각각 텍스트의 변경 전, 변경 중, 변경 후의 값을 얻을 수 있다.
• 단점
- TextWatcher 객체를 한 번 더 만들어야 한다.
- 매개 변수 이름이 p0, p1 등의 이름으로 되어있는 안드로이드 버전이 많다.
- beforeTextChanged, onTextChanged, afterTextChanged 메소드를 모두 오버라이드하여 구체화 해주어야 한다.
-> 불편함.
package com.example.fastcampus
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.util.Log
import android.widget.EditText
class EditTextTest : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_edit_text_test)
val editText_name: EditText = findViewById<EditText>(R.id.name)
val editText_age: EditText = findViewById<EditText>(R.id.age)
// addTextChangedListener 사용
editText_name.addTextChangedListener(object: TextWatcher { // TextWatcher 익명 객체 생성
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { // beforeTextChanged 오버라이드 : 이름으로 유추하기 어려운 매개 변수
Log.d("testt", "beforeTextChanged : " + p0)
// 글자가 변경되기 전
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { // onTextChanged 오버라이드
Log.d("testt", "onTextChanged : " + p0)
// 글자가 변경되는 중
}
override fun afterTextChanged(p0: Editable?) { // afterTextChanged 오버라이드
Log.d("testt", "afterTextChanged : " + p0)
// 글자가 변경되고 후
}
})
}
}
2. 람다 함수 사용
• EditText의 doBeforeTextChanged, doOnTextChanged, doAfterTextChanged 메소드 사용.
• 모든 메소드를 구현할 필요없이 필요한 메소드만 사용하면 된다.
• 매개 변수 이름으로 기능을 유추할 수 있다.
• 객체를 하나 더 만들 필요가 없다.
package com.example.fastcampus
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.util.Log
import android.widget.EditText
import android.widget.TextView
import androidx.core.widget.doAfterTextChanged
import androidx.core.widget.doBeforeTextChanged
import androidx.core.widget.doOnTextChanged
class EditTextTest : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_edit_text_test)
val editText_name: EditText = findViewById<EditText>(R.id.name)
val editText_age: EditText = findViewById<EditText>(R.id.age)
// addTextChangedListener 사용
editText_name.addTextChangedListener(object: TextWatcher {
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
Log.d("testt", "beforeTextChanged : " + p0)
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
Log.d("testt", "onTextChanged : " + p0)
}
override fun afterTextChanged(p0: Editable?) {
Log.d("testt", "afterTextChanged : " + p0)
}
})
// 람다 함수 사용
editText_age.doBeforeTextChanged { text, start, count, after -> Log.d("testt", "doBeforeTextChanged : " + text)}
editText_age.doOnTextChanged { text, start, before, count -> Log.d("testt", "doOnTextChanged : " + text)}
editText_age.doAfterTextChanged { text -> Log.d("testt", "doAfterTextChangedt : " + text)}
}
}
이 글은
패스트 캠퍼스 Android 앱 개발의 정석 with Kotlin 올인원 패키지 Online
강의를 듣고 공부한 내용을 바탕으로 작성되었습니다.
'📱 Android > 💡 개념' 카테고리의 다른 글
[Android/개념] 11. Fragment(프래그먼트) (0) | 2022.11.03 |
---|---|
[Android/개념] 10. Bundle(번들) (0) | 2022.11.03 |
[Android/개념] 8. Activity Stack(액티비티 스택) (0) | 2022.11.01 |
[Android/개념] 7. Intent(인텐트) (0) | 2022.10.31 |
[Android/개념] 6. Context(컨텍스트) (0) | 2022.10.28 |