0

내 응용 프로그램에 EditText가 있습니다. 이 editText는 editText.setText 메소드를 사용하여 10 초마다 코드를 통해 업데이트됩니다. 사용자가 소프트 키보드를 열 때이 업데이트를 중지하고 싶습니다. 사용자가 입력 작업을 완료하면 (완료 버튼) editText.setText에서 업데이트를 다시 시작하려고합니다. editText.setText 메서드를 사용하는 동안 내 EditText가 현재 활성화되어 있는지 확인하기 위해 InputMethodManager isActive (View)를 시도했습니다. 이것은 키보드가 표시 될 때 완벽하게 작동합니다. 그러나 사용자가 완료 버튼을 클릭하고 소프트 키보드가 숨겨지면 isActive (View)가 계속 true로 표시되고 editText.setText가 호출되지 않습니다. 다음은 10 초마다 editText를 업데이트하는 코드입니다.소프트 입력 키보드로 EditText를 수정하는 동안 editText.setText를 방지합니다.

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
if(!imm.isActive(editText)){ 
    editText.setText("10.2"); 
    } 

그래서이 imm.isActive (editText)는 사용자가 소프트 키보드의 완료 버튼을 누른 후에도 true를 반환합니다. 이 작업을 수행 할 수있는 방법을 제안하십시오.

답변

0

해결 방법 1

부울 제어 변수 isKeyboardVisible를 작성하고 당신이 그것을 숨길 때 키보드, false를 표시 할 때 true로 설정합니다. setText()에 전화하기 전에 값을 확인하십시오.

해결책 2

대안은 다소 해키 용액 synchronized 블록 내의 EditText 값을 변경하는 부분의 모두를 둘러싸는 것이다. 이렇게하면 각 부분은 다른 부분이 실행되기 전에 완료 될 때까지 대기합니다.

솔루션은 3

당신은 EditText의 포커스 변경 이벤트에 listen과 그들에 반응 할 수 있습니다. 그들은 자신을 보이거나 감추고있는 소프트 키보드와 일치하는 경향이 있습니다.

+0

안녕하세요, Piovezan, 답장을 보내 주셔서 감사합니다. –

+0

문제 없습니다. 대답에 만족하면 왼쪽에있는 체크 표시를 클릭하여 동의하십시오. – Piovezan

+0

해결책 1을 시도했지만 키보드의 가시성을 찾는 까다로운 방법이 있습니다. 많은 스레드에서 키보드의 가시성 전후에 화면 크기를 측정 할 것을 제안했습니다. 이 앱을 전체 화면 모드로 실행 중이므로이 방법을 사용할 수 없습니다. 솔루션 2가 유용 할 수 있지만 키보드에서 editText로 입력 할 때이 코드를 제어 할 수 없어이 코드를 동기화 된 블록에 넣을 수 없습니다. –

관련 문제