Android 在Jelly Bean emulator上按Enter键后,不会调用onEditorAction()

Android 在Jelly Bean emulator上按Enter键后,不会调用onEditorAction(),android,android-edittext,avd,android-4.2-jelly-bean,Android,Android Edittext,Avd,Android 4.2 Jelly Bean,我对最新的果冻豆模拟器的行为有问题。我的应用程序中有几个editText。当用户按下键盘上的ENTER键时,OnEditorActionListener提供特殊处理。这在ICS之前一直有效,但现在在Jelly Bean上不再调用侦听器回调方法onEditorAction()。只有新行插入到编辑文本中 这可以通过以下方式复制: EditText testEditText = new EditText(context); testEditText.setOnEditorActionListener(

我对最新的果冻豆模拟器的行为有问题。我的应用程序中有几个
editText
。当用户按下键盘上的ENTER键时,
OnEditorActionListener
提供特殊处理。这在ICS之前一直有效,但现在在Jelly Bean上不再调用侦听器回调方法
onEditorAction()
。只有新行插入到编辑文本中

这可以通过以下方式复制:

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);
这是果冻豆里的虫子吗?还是在模拟器中?还是故意改变了行为


奇怪的是,有人写道,在运行Jelly Bean的Nexus 7上调用了该方法,但参数出乎意料:

如果有人发现这个问题:

我已经对此进行了多次测试,在Jelly Bean模拟器上,当在虚拟键盘上按Enter键时,监听器回调方法onEditorAction()实际上不再被调用

正如我上面提到的,一个可能的解决方案或解决方法是用一个可用的操作键替换Enter键。这些仍然会触发onEditorAction()。我还必须指定输入类型

editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
editText.setImeOptions(EditorInfo.IME_ACTION_GO);

以下是我所做的,应该涵盖所有按下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”

根据文件,原因如下:

actionId int:操作的标识符。这将是 您提供的标识符,或者如果由于 正在按下的回车键


此示例项目的行为符合预期:@commonware:谢谢,我在您的代码中找到了解决问题的方法。如果我执行以下操作,ENTER键将与虚拟键盘上的GO键交换,这将触发onEditorAction():editText.setRawInputType(InputType.TYPE\u CLASS\u TEXT);editText.setImeOptions(EditorInfo.IME\u ACTION\u GO);或者使用XML:android:imeOptions=“actionGo”android:inputType=“text”如果手机根本不支持imeOptions怎么办?(有许多设备不这样做。)
override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean {
    if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_NULL)
        ... // Enter pressed