2012-07-03 27 views
20

Tengo un problema con el comportamiento del último emulador Jelly Bean. Tengo varios EditTexts en mi aplicación. Un OnEditorActionListener proporciona un manejo especial cuando un usuario presiona la tecla ENTRAR en el teclado. Esto funcionó hasta ICS, pero ahora en Jelly Bean ya no se llama al método de devolución de llamada del oyente onEditorAction(). Solo se inserta una nueva línea en el EditText.onEditorAction() no se invoca después de presionar la tecla Enter en el emulador Jelly Bean

Esto puede ser reproducida de esta manera:

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); 

Es esto un error en Jelly Bean? ¿O en el emulador? ¿O el comportamiento ha sido cambiado intencionalmente?

Curiosamente otra persona escribe que el método se llama, pero con parámetros inesperados, en un Nexus 7 corriendo Jelly Bean aquí: null keyevent and actionid = 0 in onEditorAction() (Jelly Bean/Nexus 7)

+1

Este proyecto de ejemplo se comporta como se esperaba: https://github.com/commonsguy/cw-omnibus/tree/master/ActionBar/ActionBarDemo – CommonsWare

+0

@CommonsWare: Gracias, he encontrado una solución para mi problema dentro de tu código Si hago lo siguiente, la tecla ENTER se intercambia con una tecla GO en el teclado virtual, que activa onEditorAction(): editText.setRawInputType (InputType.TYPE_CLASS_TEXT); editText.setImeOptions (EditorInfo.IME_ACTION_GO); – Hendrik

+1

O en XML: android: imeOptions = "actionGo" \t \t android: inputType = "text" – Hendrik

Respuesta

32

Si alguien encuentra esta pregunta: ¿

He probado esto varias veces y en el emulador de Jelly Bean, el método de devolución de llamada del oyente en EDitorAction() ya no se llama cuando se presiona la tecla Enter en el teclado virtual.

Como mencioné anteriormente, una posible solución o solución es reemplazar la tecla Intro con una de las teclas de acción disponibles. Aquellos todavía activan onEditorAction(). También tuve que especificar el tipo de entrada.

editText.setRawInputType(InputType.TYPE_CLASS_TEXT); 
editText.setImeOptions(EditorInfo.IME_ACTION_GO);
<EditText 
... 
android:imeOptions="actionGo" 
android:inputType="text" /> 
+2

y ¿qué pasa si el teléfono no admite imeActions en absoluto? (Hay muchos dispositivos que no). – Darpan

Cuestiones relacionadas