質問

私はAndroidアプリケーションに取り組んでおり、3つのEdittextsでビューを持っています。私が達成しようとしているのは、最後の数字で押されている数値キーで、そのアクティビティのためにOkkeyイベントに電話する必要があるということです。問題は、OnKeyListenerを設定したEdittextの場合、GetTextメソッドもSettextメソッドも機能しないことです。説明させてください:

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

String string1 = "";

私のoncreateメソッドでは、edittextsの1つにOnKeyListenerを設定します

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

ここで、私がオーバーライドオッキーメソッドで次のコードを書いた場合

@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キーを押すと(次のように設定)、予想どおりに機能します。アクティビティのOnresumeメソッドにもSettext( "")を追加しようとしましたが、結果に違いはありませんでした。私の質問を読むのにかかった時間に感謝します!

編集:「return false」を追加しました。 Onkeyメソッドの終わりに、私は自分の仕事でそれを持っていましたが、この質問にそれを置くのを逃しました、クリスの答えに思い出されました。

役に立ちましたか?

解決

Chrisの回答に加えて、event.getAction()がkeyevent.action_upに等しいことを保証するためにチェックを追加する必要があります。 OnKeyは2回呼び出され、GetAction()がAction_Down(最初にメソッドが呼び出される)である場合、getText()によって返されたcharquenceにキャラクターがまだ追加されていません。

他のヒント

onekeyListenerを設定するとき、edittext3では、キーにヒットしたときに何が起こるかを置き換えます。試す return false; Onkeyの終わりに。これにより、値を適切な場所に渡す必要があります。

http://developer.android.com/reference/android/view/view.onkeylistener.html

戻り値

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top