[Android-Develop] TextWatcher

2015. 1. 1. 17:21 - Song's IT

TextWatcher Class에디트텍스트와 관련된 콜백 인터페이스이다.

즉, 사용자입력창(에디트텍스트)에 입력 발생 시

이를 제어할 수 있는 메서드가 정의되어있다.

사용자가 값을 입력할 때마다 어떠한 처리를 해주고 싶다면 TextWatcher를 활용하자.

아래는 값 입력시 버튼이 하나씩 활성화 되는 예시코드이다.


TestTextWatcherActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
public class TestTextWatcherActivity extends Activity {
     
    // 0. 초기화
    private static final int EMAIL = 0;
    private static final int NAME = 1;
    private static final int PHONE = 2;
    private static final int CONFIRM = 3;
    private EditText[] etTexts;
    private Button[] btButtons;
     
    // 1. setLayout()메서드 : 각 요소들을 리스트에 저장
    public void setLayout() {
        etTexts = new EditText[] { (EditText) findViewById(R.id.et_box_01),
                (EditText) findViewById(R.id.et_box_02),
                (EditText) findViewById(R.id.et_box_03) };
 
        btButtons = new Button[] { (Button) findViewById(R.id.bt_check_01),
                (Button) findViewById(R.id.bt_check_02),
                (Button) findViewById(R.id.bt_check_03),
                (Button) findViewById(R.id.bt_confirm) };
    }
     
     
    // 2. onCreate()
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         
        // Layout설정
        setLayout();
         
        // 각 EditText요소에 addTextChangedListner()를 이용하여 정의한 TextWatcher지정
        etTexts[EMAIL].addTextChangedListener(emailWatcher);
        etTexts[NAME].addTextChangedListener(nameWatcher);
        etTexts[PHONE].addTextChangedListener(phoneWatcher);
         
        // 버튼 초기화(Disable)
        for (Button b : btButtons) {
            b.setEnabled(false);
        }
    }
 
     
    // 3. 각 TextWatcher 정의
    private TextWatcher emailWatcher = new TextWatcher() {
        // Text변경 시 CallBack
        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            if (s.length() > 0) {
                btButtons[EMAIL].setEnabled(true);
            } else {
                btButtons[EMAIL].setEnabled(false);
            }
 
            setEnable(setButtonEnable(etTexts[EMAIL], etTexts[NAME],
                    etTexts[PHONE]));
        }
         
        // Text변경 전 CallBack
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
        }
         
         
        // Text변경 후 CallBack
        @Override
        public void afterTextChanged(Editable s) {
        }
    };
 
    private TextWatcher nameWatcher = new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            if (s.length() > 0) {
                btButtons[NAME].setEnabled(true);
            } else {
                btButtons[NAME].setEnabled(false);
            }
 
            setEnable(setButtonEnable(etTexts[EMAIL], etTexts[NAME],
                    etTexts[PHONE]));
        }
 
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
        }
 
        @Override
        public void afterTextChanged(Editable s) {
        }
    };
 
    private TextWatcher phoneWatcher = new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            if (s.length() > 0) {
                btButtons[PHONE].setEnabled(true);
            } else {
                btButtons[PHONE].setEnabled(false);
            }
 
            setEnable(setButtonEnable(etTexts[EMAIL], etTexts[NAME],
                    etTexts[PHONE]));
        }
 
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
        }
 
        @Override
        public void afterTextChanged(Editable s) {
        }
    };
     
     
    // 4. 각 버튼 Enable메서드 정의
    private void setEnable(boolean isEnable) {
        btButtons[CONFIRM].setEnabled(isEnable);
    }
     
     
    // 5. Confirm버튼 Enable메서드 정의
    private boolean setButtonEnable(EditText email, EditText name,
            EditText phone) {
        boolean isAllFull = false;
 
        if (email != null && name.length() > 0 && name != null
                && name.length() > 0 && phone != null && phone.length() > 0) {
            isAllFull = true;
        }
        return isAllFull;
    }
     
     
    // 6. 각 버튼 이벤트 처리기
    public void onButtonClick(View v) {
        switch (v.getId()) {
        case R.id.et_box_01:
 
            break;
        case R.id.et_box_02:
 
            break;
        case R.id.et_box_03:
 
            break;
        case R.id.bt_confirm:
            if (btButtons[CONFIRM].isEnabled()) {
                Toast.makeText(
                        getApplicationContext(),
                        "EMAIL = " + etTexts[EMAIL].getText().toString()
                                + " 등록 되었습니다. , " + "NAME = "
                                + etTexts[NAME].getText().toString()
                                + " 등록 되었습니다. , " + "PHONE = "
                                + etTexts[PHONE].getText().toString()
                                + " 등록 되었습니다.", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(getApplicationContext(), "모두 입력해 주십시오.",
                        Toast.LENGTH_SHORT).show();
            }
            break;
        }
    }
}


다른 카테고리의 글 목록

Android/Develop 카테고리의 포스트를 톺아봅니다