1

私は Android アプリケーションに取り組んでおり、3 つの EditText を持つビューを持っています。私が達成しようとしているのは、最後の数字キーが押されたときに、そのアクティビティの okKey イベントを呼び出す必要があるということです。問題は、onKeyListener を設定した EditText では、getText メソッドも setText メソッドも機能しないことです。説明させてください:

空の文字列を初期化するとします

String string1 = "";

私の onCreate メソッドでは、EditTexts の 1 つで onKeyListener を設定します。

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    findViewById(R.id.EditText3).setOnKeyListener(this);
    ...
}

ここで、オーバーライドする okKey メソッドに次のコードを記述すると、

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
    if (keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) {
        string1 += ((EditText) findViewById(R.id.EditText1)).getText();
        string1 += ((EditText) findViewById(R.id.EditText2)).getText();
        string1 += ((EditText) findViewById(R.id.EditText3)).getText();

        ((EditText) findViewById(R.id.EditText1)).setText("");
        ((EditText) findViewById(R.id.EditText2)).setText("");
        ((EditText) findViewById(R.id.EditText3)).setText("");
    }
return false;
}

EditText1 と EditText2 のみがクリアされ、EditText3 のテキストは string1 に連結されません。If ステートメントの条件を次のように置き換えると、

if (keyCode == KeyEvent.KEYCODE_ENTER)

次にEnterキーを押すと(Nextに設定)、期待どおりに機能します。アクティビティの onResume メソッドにも setText("") を追加しようとしましたが、結果に違いはありませんでした。私の質問を読んでくれてありがとう!

編集:「return false;」を追加 onKey メソッドの最後に、私は自分の仕事でそれを持っていましたが、この質問に入れるのを逃しました。クリスの答えに思い出されました。

4

2 に答える 2

1

OnKeyListenerをEditText3に設定すると、キーを押したときに何が起こるかが置き換えられます。return false;onKeyの最後で試してください。これにより、値が適切な場所に渡されます。

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

戻り値

リスナーがイベントを消費した場合はtrue、それ以外の場合はfalse。

于 2011-06-13T23:16:00.833 に答える