23

最新のJellyBeanエミュレーターの動作に問題があります。EditTexts私のアプリにはいくつかあります。AnOnEditorActionListenerは、ユーザーがキーボードのENTERキーを押したときに特別な処理を提供します。これはICSまでは機能していましたが、Jelly Beanでは、リスナーのコールバックメソッドonEditorAction()が呼び出されなくなりました。に挿入されるのは新しい行だけEditTextです。

これは次のように再現できます。

EditText testEditText = new EditText(context);
testEditText.setOnEditorActionListener(new OnEditorActionListener() {

    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        Log.d(TAG, "onEditorAction() called");
        return false;
    }
});
addView(testEditText);

これはJellyBeanのバグですか?またはエミュレーターで?または、動作が意図的に変更されていますか?

不思議なことに、他の誰かがメソッドが呼び出されると書いていますが、予期しないパラメータを使用して、ここでJellyBeanを実行しているNexus7で:onEditorAction()のnullkeyeventおよびactionid= 0(Jelly Bean / Nexus 7)

4

2 に答える 2

35

他の誰かがこの質問を見つけた場合:

これを数回テストしましたが、Jelly Beanエミュレーターでは、仮想キーボードでEnterキーを押しても、リスナーのコールバックメソッドonEditorAction()が呼び出されなくなりました。

上で述べたように、考えられる解決策または回避策は、Enterキーを使用可能なアクションキーの1つに置き換えることです。それらはまだonEditorAction()をトリガーします。入力タイプも指定する必要がありました。

editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
editText.setImeOptions(EditorInfo.IME_ACTION_GO);
<EditText
...
android:imeOptions="actionGo"
android:inputType="text" />
于 2012-07-18T13:01:03.040 に答える
1

これが私がしたことです。これは、押されているすべてのタイプのEnterをカバーするはずです。

override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean {
    if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_NULL)
        ... // Enter pressed

XMLでは追加しただけですandroid:imeOptions="actionGo"

ドキュメントによると、理由:

https://developer.android.com/reference/android/widget/TextView.OnEditorActionListener.html#onEditorAction(android.widget.TextView,%20int,%20android.view.KeyEvent)

actionId int:アクションの識別子。これは、指定した識別子、またはEnterキーが押されたために呼び出された場合はEditorInfo#IME_NULLのいずれかになります。

于 2019-06-02T10:49:18.533 に答える