2012-04-03 9 views
8

Tengo una clase A que ejecuta actividad a través de startActivityForResult pasando a ella. En otra clase, digamos B Obtengo este Intent y recreo la actividad por él. ¿Cómo puedo escuchar eventos para esa actividad, p. La actividad que se inició para el resultado se está ejecutando y el usuario presionó el botón "Atrás", por lo que quiero hacer algo. ¿Cómo puedo hacer esto? Gracias por adelantado.Cómo configurar el oyente onBackButton a una actividad

La actividad en la que recreo una instancia de objeto no se deriva de la clase de actividad. Es solo ACTIVIDAD. Entonces solo tengo un objeto ¿Hay alguna manera de hacer tales cosas con instancia de clase pero no una clase?

Respuesta

1

Puede anular onDestroy y colocar el código allí.

Otra posibilidad (y puede ajustarse mejor a sus necesidades) es anular onBackPressed.

+2

¿No sería esto invocado por el sistema si la actividad se está destruyendo, por ejemplo, debido a la falta de memoria? No estoy seguro de que esto es lo que OP busca. –

+0

Tiene sentido, aunque creo que, en general, es mejor seguir el ciclo de vida de la actividad y no estar vinculado a las claves. – MByD

+0

Bueno, eso depende de cuáles sean los requisitos. En una de mis aplicaciones, tengo una actividad, cuya vista está cambiando en función de la acción del usuario. Cuando se presiona la tecla "atrás", restablezco el estado original (si estoy en el estado modificado) o termino la actividad. En este caso, el ciclo de vida no me va a ayudar. –

4

En la actividad, en la que desea actuar en el botón "atrás", simplemente anular onKeyDown (o onKeyUp) Método:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     //do whatever you need for the hardware 'back' button 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

Tenga en cuenta que si desea que la tecla "atrás" para todavía termina su actividad, entonces se tendrá que incluir

setResult(result); //if you want to pass a result to activity A 
finish(); 

algún lugar de esa condicional antes return true;

Cuestiones relacionadas