2014-10-29 5 views
0

안드로이드에서 editText의 OnKeyListener 메소드를 사용하고 있지만 장치가 해당 리스너를 호출하지 않는 것으로 보입니다. 사용중인 코드가 있습니다. 문제는 버튼을 삭제하는 데 걸리는 시간입니다 대/소문자를 구별 할 수 없지만 때로는 onKeyListener가 호출되지 않는 경우도 있습니다.이 메서드에 문제가 있습니까? 텍스트 워처를 사용해야합니까?View.OnKeyListener가 작동하지 않습니다.

cp_confirm_pin_code1.setOnKeyListener(new OnKeyListener() {     
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      // TODO Auto-generated method stub 
      Log.e("keycode action confirm pin1",""+keyCode); 
      if(event.getAction()==KeyEvent.ACTION_DOWN) 
       if(keyCode == KeyEvent.KEYCODE_DEL){ 
        //this is for backspace 
        Log.e("back space for 1", "back space for 1"); 
        cp_confirm_pin_code1.setText(""); 
       } 
       else{ 
        Log.e("other numbers 1", "other numbers 1 "); 
        String text=null; 
        Log.e("code", ""+keyCode); 
        switch (keyCode) { 
        case KeyEvent.KEYCODE_0: 
         text="0"; 
         break; 
        case KeyEvent.KEYCODE_1: 
         text="1"; 
         Log.e("text in 1",""+text); 
         break; 
        case KeyEvent.KEYCODE_2: 
         text="2"; 
         break; 
        case KeyEvent.KEYCODE_3: 
         text="3"; 
         break; 
        case KeyEvent.KEYCODE_4: 
         text="4"; 
         break; 
        case KeyEvent.KEYCODE_5: 
         text="5"; 
         break; 
        case KeyEvent.KEYCODE_6: 
         text="6"; 
         break; 
        case KeyEvent.KEYCODE_7: 
         text="7"; 
         break; 
        case KeyEvent.KEYCODE_8: 
         text="8"; 
         break; 
        case KeyEvent.KEYCODE_9: 
         text="9"; 
         break; 
        case KeyEvent.KEYCODE_BACK: 

         getActivity().finish(); 
         break; 
        default: 
         Log.e("default", "default"); 
         break; 

        } 
        Log.e("text vallue", "text value"+text); 
        if(text!=null){ 
         Log.e("requesting focus 1", "requesting focus 1"); 

         cp_confirm_pin_code1.setText(text); 
         cp_confirm_pin_code2.requestFocus(); 
        } 
       } 
      return true; 
     } 
    }); 
+0

Sneha, 질문에 대해 혼란 스럽습니다. 제대로 설명해 주시겠습니까? –

답변

1

onKeyListener는 하드웨어 키보드의 이벤트로만 호출됩니다. 따라서 TextWatcher를 사용하는 것이 좋습니다.

설명서에는 소프트웨어가 아닌 하드웨어 키 스트로크에 대해서만 키 이벤트가 전파된다고 나와 있습니다. 완전히 그 명예 또는 실제로 동등한 조건으로 소프트 및 하드 키보드를 치료하기 위해 제조업체에게 달려 있지만

http://developer.android.com/reference/android/view/View.OnKeyListener.html

장치 제조 업체는 실제로 키 리스너를 통해 소프트 키보드 이벤트를 전파 할 낙심되고있다.

안드로이드 4.2.2부터 안드로이드 시스템 자체는 소프트 키보드의 키 스트로크 이벤트를 지원하지 않으므로 제조업체조차도 자신의 방식을 선택할 수 없습니다.

유일한 실수 방지 옵션은 사용자의 IME (소프트 키보드)를 구현하고 키 입력을 직접 처리하는 것입니다.

TextWatcher는 대부분 키 수신기를 대체하는 데 사용할 수 있지만 editText.setText (...); 또한 TextWatcher 이벤트를 트리거하므로, 입력 된 키에만 관심이 있다면 아마도 TextWatcher도 해결책이 될 수 없습니다.

TextWatcher를 AutocomleteTextView 또는 EditText와 함께 사용할 때는주의하십시오. TextWatcher 이벤트 내에서 AutocompleteTextView/EditText 컨텐트의 텍스트를 수정하지 마십시오. 그렇지 않으면 무한 이벤트/수신 루프로 끝날 것입니다.

+0

당신이 말한 것과 똑같은 문제에 답해 주셔서 고맙습니다. 제 코드에서 제 요구 사항을 이해할 수 있습니다. 대안을 제안 해 주시겠습니까? –

+0

나는 이미 TextWatcher를 사용할 수 있다고 말했다. –