TextWatcher Class는 에디트텍스트와 관련된 콜백 인터페이스이다.
즉, 사용자입력창(에디트텍스트)에 입력 발생 시
이를 제어할 수 있는 메서드가 정의되어있다.
사용자가 값을 입력할 때마다 어떠한 처리를 해주고 싶다면 TextWatcher를 활용하자.
아래는 값 입력시 버튼이 하나씩 활성화 되는 예시코드이다.
TestTextWatcherActivity.java
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' 카테고리의 다른 글
| [Android-Develop] 액티비티(Activity) 구성 (0) | 2015.01.05 |
|---|---|
| [Android-Develop] 인플레이션(Inflation) (0) | 2015.01.05 |
| [Android-Develop] 위젯 - 에디트텍스트(EditText) (0) | 2015.01.01 |
| [Android-Develop] 위젯 - 버튼(Button) (0) | 2015.01.01 |
| [Android-Develop] 위젯 - 텍스트 뷰(Text View) (0) | 2015.01.01 |