본문 바로가기

Android

[Android]버터나이프(Butter Knife)의 @OnTextChanged로 EditText 변경 이벤트 탐지

반응형

안드로이드 앱을 개발하시는 분이라면 거의 대부분 알고 계시는 버터나이프(Butter Knife)

@BindView 어노테이션을 이용해서 findViewById의 반복 사용을 제거해주고,

@OnClick 어노테이션으로 클릭 이벤트를 대체해주고,

@BindString, BindColor 어노테이션으로 리소스의 값들도 쉽게 가져올 수 있는

정말 정말 유용한 라이브러리입니다.


이 3가지 외에도 @OnTextChanged 어노테이션이 있습니다.

이름 그대로 텍스트가 변경되는 이벤트를 대체해줍니다.


보통 EditText의 값이 변경되는 이벤트는 addTextChangedLister 리스너와 TextWatcher 인터페이스를 사용합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                
            }
 
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
 
            }
 
            @Override
            public void afterTextChanged(Editable s) {
 
            }
        });
cs



다수의 EditText의 입력을 감지하기 위해서는

TextWatcher를 상속받는 별도의 CustomTextWatcher클래스를 생성한 후

각각의 EditText에 리스너를 추가하고

CustomTextWatcher에서 각각의 EditText에 맞는 작업을 수행하게 작성해야합니다.


이 과정에서 CustomTextWatcher를 만드는 것도 귀찮고

각각의 EditText에 리스너를 추가하는 것 또한, 코드를 길어지게 만듭니다.(마치 findViewById 처럼)


하지만 @OnTextChanged 를 사용하면 위의 과정이 다 필요없고 코드도 간결해집니다.


1
2
3
4
@OnTextChanged(R.id.editText)
public void editText(CharSequence text){
   Log.d("TAG", text.toString);
}
cs



끝입니다.


EditText의 값이 변경되는 이벤트를 아주 간단하게 해결할 수 있습니다.


이외에도 버터나이프에는 다양한 Listener Binding들이 있습니다.


http://craftedcourses.io/all-about-butter-knife-part-3/


위의 링크에서 버터나이프의 다양한 기능들을 확인해보시고


필요한 기능들을 잘 활용하시기 바랍니다.

반응형