2012-07-03 5 views
20

Ho un problema con il comportamento dell'ultimo emulatore Jelly Bean. Ho diversi EditTexts nella mia app. Un OnEditorActionListener fornisce una gestione speciale quando un utente preme il tasto INVIO sulla tastiera. Questo ha funzionato fino a ICS, ma ora su Jelly Bean il metodo di callback dell'ascoltatore onEditorAction() non viene più chiamato. Solo una nuova riga viene inserita in EditText.onEditorAction() non viene chiamato dopo aver premuto il tasto Invio sull'emulatore Jelly Bean

Questo può essere riprodotto in questo modo:

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

Si tratta di un bug in Jelly Bean? O nell'emulatore? O il comportamento è stato cambiato intenzionalmente?

Curiosamente qualcun altro scrive che il metodo viene chiamato, ma con parametri inaspettati, su un Nexus 7 in esecuzione Jelly Bean qui: null keyevent and actionid = 0 in onEditorAction() (Jelly Bean/Nexus 7)

+1

Questo progetto di esempio si comporta come ci si aspettava: https://github.com/commonsguy/cw-omnibus/tree/master/ActionBar/ActionBarDemo – CommonsWare

+0

@CommonsWare: Grazie, ho trovato una soluzione per il mio problema nel tuo codice. Se faccio quanto segue, il tasto ENTER viene scambiato con un tasto GO sulla tastiera virtuale, che attiva onEditorAction(): editText.setRawInputType (InputType.TYPE_CLASS_TEXT); editText.setImeOptions (EditorInfo.IME_ACTION_GO); – Hendrik

+1

Oppure in XML: android: imeOptions = "actionGo" \t \t android: inputType = "text" – Hendrik

risposta

32

Se qualcun altro trova questa domanda:

Ho provato questo diversi times e sull'emulatore Jelly Bean il metodo callback listener suEditorAction() infatti non viene più chiamato quando si preme il tasto Invio sulla tastiera virtuale.

Come ho già detto una possibile soluzione o soluzione alternativa è sostituire il tasto Invio con uno dei tasti azione disponibili. Quelli si innescano ancora suEditorAction(). Ho anche dovuto specificare il tipo di input.

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

e cosa succede se il telefono non supporta affatto imeActions? (Ci sono molti dispositivi che non lo fanno). – Darpan