Su un solo telefono su cui sto eseguendo il test (HTC Incredible, Android 2.2, Software 3.21.605.1), sto riscontrando il seguente comportamento.OnEditorActionListener chiamato due volte con lo stesso eventoTime sulla tastiera SenseUI
Il gestore di eventi onEditorAction viene chiamato due volte (immediatamente) quando si preme il tasto Invio sulla tastiera UI Senso.
Il KeyEvent.getEventTime() è lo stesso per entrambe le volte l'evento è chiamato, mi porta a questo work-around:
protected void onCreate(Bundle savedInstanceState) {
[...]
EditText text = (EditText)findViewById(R.id.txtBox);
text.setOnEditorActionListener(new OnEditorActionListener() {
private long lastCalled = -1;
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event.getEventTime() == lastCalled) {
return false;
} else {
lastCalled = event.getEventTime();
handleNextButton(v);
return true;
}
}
});
[...]
}
L'EditText è definito come:
<EditText
android:layout_width="150sp"
android:layout_height="wrap_content"
android:id="@+id/txtBox"
android:imeOptions="actionNext"
android:capitalize="characters"
android:singleLine="true"
android:inputType="textVisiblePassword|textCapCharacters|textNoSuggestions"
android:autoText="false"
android:editable="true"
android:maxLength="6"
/>
On tutti gli altri dispositivi su cui ho provato, il pulsante di azione è etichettato correttamente "Avanti" e l'evento viene chiamato una sola volta quando viene premuto quel pulsante.
Si tratta di un errore nella tastiera di Sense UI o sto facendo qualcosa in modo errato?
Grazie per l'assistenza.
Aggiornato - grazie alle risposte fornite, ho stabilito quanto segue come miei assegni. Questo funziona bene su entrambi i telefoni che ho a disposizione per prova (Sense UI e CyanogenMod CM7)
if (event != null && event.getAction() != KeyEvent.ACTION_DOWN) {
return false;
}
if (actionId != EditorInfo.IME_ACTION_NEXT && actionId != EditorInfo.IME_NULL) {
return false;
}
Nessuna risposta per te, ho paura, volevo solo dire che oggi sono stato colpito da questo problema. Non avevo mai visto la tastiera HTC Sense prima di oggi .. ugh!E come sono riusciti a ignorare il flag textNoSuggestions? Rende la mia interfaccia utente un po 'schifosa, marcandoli. –
Ho notato che molte app non funzionano correttamente dato che la loro tastiera non implementa il pulsante predefinito (è sempre "Invio"). Ciò include le applicazioni fornite da Google (inclusa, credo, la procedura di registrazione iniziale). Sembra una cosa abbastanza grande da trascurare per HTC. È un peccato, perché in realtà mi piace SenseUI su tutti più di Motoblur. Grazie per la conferma. – mbafford