목차
반응형
kotlin에서는 함수를 이용할 때 이를 매개변수로 전달할 수 있습니다.
저는 EditText에 대한 확장함수를 만들어 적용해보았습니다.
먼저 코드를 한 번 보도록 하겠습니다.
fun EditText.textChangedListener(textChanged : (CharSequence?) -> Unit){
this.addTextChangedListener(object :TextWatcher{
override fun afterTextChanged(s: Editable?) = Unit
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
textChanged(s)
}
})
}
여기서 addTextChangedListener는 TextWatcher라는 인터페이스를 구현하도록 되어있는데, 이 인터페이스는
세 가지 메소드를 재정의 해 주어야 합니다. 여기서 필자는 onTextChanged 함수만 이용할 예정이므로, 나머지 함수들에 대해서는 반환값을 Unit(반환값이 없다는 표시)으로 지정해주었습니다.
주목해야 할 부분은 함수의 선언부분입니다.
fun EditText.textChangedListener(textChanged : (CharSequence?) -> Unit){
}
여기서 각각의 의미를 한 번씩 살펴보겠습니다.
textChanged : 매개변수로 넘어오는 함수 하나의 이름(textChangedListener라는 함수 내부에서 textChanged라는 이름으로 사용 가능합니다.
() -> Unit : 매개변수가 없는 함수이며, 리턴타입 또한 없습니다.
(CharSequence?) -> Unit : 매개변수가 CharSequence?타입 하나를 가지며, 리턴타입은 없습니다.
(A,B) -> Int : 매개변수로 A타입 하나, B타입 하나를 받으며, 리턴타입으로 Int를 반환합니다.
이정도 알고 나서, 실제 확장함수가 어떻게 사용되는지 살펴보겠습니다.
et_id.textChangedListener{
if(it.isNullOrBlank()){
Toast.makeText(this,"아이디 빈칸",Toast.LENGTH_SHORT).show()
}
}
실제 EditText객체에서 해당 확장함수를 부를 떄, {}안에 원하는 로직을 적어주면 됩니다.
반응형
'Develop > Android' 카테고리의 다른 글
Android Kotlin collection 함수들 모음 (0) | 2020.07.25 |
---|---|
Android Socket 실시간 통신 라이브러리 활용 (0) | 2020.06.14 |
kotlin custom listener 이용하기 (0) | 2020.05.06 |
Android Room에 코루틴과 LiveData 적용해보기 (0) | 2020.04.28 |
MPAndroidChart 라이브러리를 활용한 BarChart 그리기 (19) | 2020.04.26 |