[Android-Develop] TextWatcher

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

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 카테고리의 포스트를 톺아봅니다