¿cuál es el código para la acción predeterminada del botón 'atrás' en android?
Tengo un edittext y un botón de guardar se muestra. Cuando se pulsa la tecla de retroceso, quiero que desaparezcan (si son visibles) y la próxima presionar de nuevo hará la acción predeterminada del botón de retroceso. El código es el siguiente:
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { event.startTracking(); return true; } return super.onKeyDown(keyCode, event); } public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() && !event.isCanceled()) { if(save.isShown()) { save.setVisibility(Button.GONE); text.setVisibility(EditText.GONE); } //else ??????????????? return true; } return super.onKeyUp(keyCode, event); }
El código anterior tiene los siguientes resultados: 1. cuando edittext y el botón es visible, a continuación, el botón de volver hace que se han ido, pero la prensa siguiente no da nada. Aunque si el botón de retroceso se mantiene presionado, volvemos a la actividad anterior. 2. cuando edittext y el botón no están inicialmente allí, presionando del botón de la parte posterior para la aplicación inesperada. Aunque si el botón trasero se mantiene presionado, volvemos a la actividad anterior.
En el lugar de else, he intentado finish () pero el programa se detiene inesperadamente. return false también resulta igual ..
@Override public void onBackPressed() { doStuff(); }
Enlace aquí
Editar
Espera, ¿qué tal una larga prensa? Si estoy leyendo la pregunta original correctamente, ¿quieres que la primera copia atrás oculte algunas vistas y la segunda que se comporte normalmente? ¿Por qué no sólo algo como esto:
private boolean flag = false; @Override public void onBackPressed() { if(flag) { super.onBackPressed(); } else { view.setVisibility(View.GONE); flag = true; } }
reemplazar
if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() && !event.isCanceled()) { if(save.isShown()) {
por
if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() && !event.isCanceled() && save.isShown()) {
@Override public void onBackPressed() { myMethod(); super.onBackPressed(); }
Es muy importante llamar al supermethod cuando reemplazas métodos como este. ¡Ponga cualquier código que usted desea ejecutar antes de la llamada del supermethod y usted debe ser de oro!
EDITAR:
antes de la supercall, no después.