2016-08-12 12 views
0

OnKeyListenerを使用してエントリに応じてEditTextの内容を変更しようとしていますが、2回呼び出されているように見えます。OnKeyListenerがEditTextを変更しています

public class MyKeyListener implements View.OnKeyListener{ 
    EditText et; 

    public MyKeyListener(EditText editText){ 
     this.et = editText; 
    } 

    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if(keyCode == KeyEvent.KEYCODE_0){ 
      this.et.setText("0"); 
     } else { 
      this.et.setText("1"); 
     } 
    } 
} 

と私はこれを持っている主な活動に:

EditText et = (EditText) findViewById(R.id.myET); 

MyKeyListener mkl = new MoneyKeyListener(et); 
et.setOnKeyListener(mkl); 

答えて

1

あなたはハードウェアキーボードを使用しています。ここ

は、コードの短縮版ですか? documentationによれば、ソフトキーボードはonKeyListenerコールバックを呼び出す必要はありません。つまり、onKeyDownイベントとonKeyUpイベントがあるため、2回呼び出されたのはその理由です。あなたのonKey(...)メソッドでは、意図したイベント(上または下)に反応するようにKeyEventをチェックする必要があります。

+0

ありがとう。私はそれをチェックします!キーボードに関しては、私はソフトキーボードを使用していますが、バックスペースキーを検出する他の方法はありません(以前はTextWatcherを使用していましたが、バックスペースは検出されません...) – averageman

1

イベントを2回呼び出す場合は、@RScottCarsonの回答から知っていると思います。 softkeyboardの場合は、次のようにバックスペースを検出できます。

@Override 
public boolean onKey(View v, int keyCode, KeyEvent event) { 

    if(keyCode == KeyEvent.KEYCODE_DEL) { 
     // for backspace...check 
    } 
    //rest of the code 
    return false;  
} 
+0

しかし、ハードキーボードのために働く? – averageman

+0

私は柔らかいとも思っています...あなたが試してみてください – Riad

関連する問題