2012-04-03 12 views
8

Ho una classe A che esegue attività tramite startActivityForResult passando a Intent. Nell'altra classe, diciamo B ottengo questo Intent e ricreamo attività da esso. Come posso ascoltare eventi per tale attività, ad es. l'attività che è stata avviata per il risultato è in esecuzione e l'utente ha premuto il pulsante "indietro", quindi voglio fare qualche azione. Come posso fare questo? Grazie in anticipo.Come impostare su ListenerBackButton su un'attività

L'attività in cui viene ricreata l'istanza dell'oggetto non è derivata dalla classe Attività. È solo ATTIVITÀ. Quindi ho solo oggetto. c'è un modo per fare cose del genere con l'istanza di classe ma non con una classe?

risposta

22

si dovrebbe ignorare il metodo: onBackPressed() della classe Activity.

1

È possibile ignorare onDestroy e inserire il codice lì.

Un'altra possibilità (e può adattarsi meglio alle vostre esigenze) è di ignorare onBackPressed.

+2

Non sarebbe chiamato dal sistema se l'attività viene distrutta, ad esempio a causa di esaurimento della memoria? Non sono sicuro che questo sia ciò che OP sta cercando. –

+0

Hai un punto, anche se penso che in generale sia meglio seguire il ciclo di vita dell'attività e non essere vincolato ai tasti. – MByD

+0

Bene, questo dipende da quali sono i requisiti. In una delle mie app, ho un'attività, la cui visualizzazione cambia in base all'azione dell'utente. Quando si preme il tasto "indietro", ripristino lo stato originale (se sono nello stato modificato) o termino l'attività. In questo caso, il ciclo di vita non mi aiuterà. –

4

Nell'attività, in cui si desidera agire sul tasto "indietro", semplicemente ignorare onKeyDown (o onKeyUp) Metodo:

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

Tenete presente che se si desidera che il tasto "back" per terminare ancora la vostra attività, allora avrete bisogno di includere

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

qualche parte in quel condizionale prima return true;

Problemi correlati