728x90
안드로이드 EditText를 이용하여 입력이 끝나는 시점에 이벤트를 실행하는 구문이 필요한데
이미 많이 안려진 TextWatcher 클래스를 이용하게 되면 입력이 되는 순간마다
이벤트가 호출되어 만약 서버로 데이터를 올리는 프로그램의 경우 너무 불필요한 통신을 하게 됩니다
이러한 것을 방지하기 위해 사용자에 의해 입력이 완료된 시점을 어떻게 체크할 수 있을까를 고민했는데
생각보다 방법은 간단한 곳에서 찾았습니다
바로 Focus 이벤트를 사용하는 것인데 이론적 원리로는 사용자가 EditText를 누르고
입력을 완료하고 다른 화면을 터치하거나 EditText가 Focus를 잃는다면 입력이 완료되었다는 의미입니다
edittest.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
}else{
program_setting.SetPHHighAlarm(edittest.getText().toString());
}
}
});
위 코드는 EditText에 setOnFocusChangeListener를 통해 Focus이벤트를 등록합니다
EditText에 포커스가 주어지거나 잃게 되었을 때 hasFocus를 통해 이벤트가 발생하게 되는데
hasFocus가 true이면 현재 EditText에 포커스가 주어진 것이고
false이면 EditText에 포커스가 사라진 시점이기 때문에
사용자의 입력이 완료된 시점 즉 EditText에서 더 이상 수정할 것이 없기에
다른 곳을 터치했다는 결론을 가지고 hasFocus가 false인 시점에서 이벤트를 처리했습니다
반대로 EditText를 눌렀을 때 자동적으로 값이 써진다거나 하는 등의 이벤트 처리를 위해서는
hasFocus가 true인 시점에 구현해주시면 됩니다
728x90
반응형
'안드로이드' 카테고리의 다른 글
[Android] 다이얼로그 뷰바인딩 wrap_content 고정되는 문제 해결 (6) | 2022.09.23 |
---|---|
[Android] Dialog layout ViewBinding 사용하기 (1) | 2022.09.23 |
[Android] this and base files have different roots 에러해결 (1) | 2022.09.23 |
[Android] REST API GET 통신하기 (2) | 2022.09.22 |
[Android] 안드로이드12 이상 Wifi 변경된 연결 방법 (4) | 2022.09.20 |
댓글