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 |