En solo un teléfono que estoy probando (HTC Incredible, Android 2.2, Software 3.21.605.1), estoy experimentando el siguiente comportamiento.OnEditorActionListener llamado dos veces con el mismo eventoTiempo en el teclado SenseUI
El controlador de eventos onEditorAction se llama dos veces (inmediatamente) cuando se presiona la tecla Entrar en el teclado de la interfaz de usuario de Sense.
El KeyEvent.getEventTime() es el mismo para las dos veces el evento se llama, que me lleva a esta solución alternativa:
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;
}
}
});
[...]
}
El EditarTexto se define como:
<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"
/>
En todos los demás dispositivos en los que he probado, el botón de acción está etiquetado correctamente como "Siguiente" y el evento solo se llama una sola vez cuando se presiona ese botón.
¿Esto es un error en el teclado de Sense UI, o estoy haciendo algo incorrectamente?
Gracias por cualquier ayuda.
Actualizado - gracias a las respuestas dadas, he establecido lo siguiente como mis cheques. Esto funciona bien en ambos de los teléfonos que tiene disponible para la prueba (interfaz de usuario Sense y CyanogenMod CM7)
if (event != null && event.getAction() != KeyEvent.ACTION_DOWN) {
return false;
}
if (actionId != EditorInfo.IME_ACTION_NEXT && actionId != EditorInfo.IME_NULL) {
return false;
}
Sin respuesta para usted Tengo miedo, solo quería decir que esta edición me ha afectado hoy. Nunca antes había visto el teclado HTC Sense ... ¡Uf!¿Y cómo se salieron con la tarea de ignorar el indicador textNoSuggestions? Hace que mi interfaz de usuario sea un poco sucky, los descompone. –
Me he dado cuenta de que muchas aplicaciones no funcionan del todo bien, ya que su teclado no implementa el botón predeterminado (siempre es "Enter"). Esto incluye las aplicaciones proporcionadas por Google (incluido, creo, el proceso de registro inicial). Parece una gran cosa para HTC pasar por alto. Es una pena, porque en realidad me gusta más SenseUI que Motoblur. Gracias por la confirmación. – mbafford