2012-08-28 8 views
13

Vorrei sapere se la mia attività è stata visualizzata perché l'utente ha premuto indietro su un'altra attività. Nel ciclo di vita non sono stato in grado di identificare alcuna callback che mi fornisce informazioni valide.Determinare se l'attività è andata in primo piano a causa della navigazione indietro

onRestart() non funziona. Si attiverà anche se l'attività Apps è stata portata in primo piano. onResume() non funziona per lo stesso motivo.

Suppongo che ci sia una soluzione semplice per questo, ma in Android le cose apparentemente semplici possono essere piuttosto cattive.

+1

studio [questa risposta] (http: // StackOverflow. it/a/10493384/779408) – breceivemail

+1

Un po 'tardi, ma perché non funziona onRestart? Per me funziona? – osrl

risposta

14

Chiamare la 2a attività con startActivityForResult(Intent, int), quindi ignorare lo onBackPressed() nella 2a attività e farlo setResult() in RESULT_CANCELED. Infine, fare in modo che la prima attività venga rilevata in onActivityResult().

Codice esempio:

Attività 1:

Intent i = new Intent(Activity1.this, Activity2.class); 
startActivityForResult(i, 0); 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == 0) { 
     if (resultCode == RESULT_CANCELED) { 
       // user pressed back from 2nd activity to go to 1st activity. code here 
     } 
    } 
} 

Attività 2:

@Override 
public void onBackPressed() { 
    setResult(RESULT_CANCELED); 
    finish(); 
} 
+1

buona risposta, anche se ho circa 15 attività e sto usando AndoridAnnotations che non ha possibilità di chiamare startActivityForResult (eppure, anche se in una prossima versione) ... quindi spero ancora di avere qualche altra idea ... – Jakob

+1

AndroidAnnotations impedisce tu dall'usare normali costrutti Android di base come questo? Non userei uno strumento del genere quindi ... – Ridcully

+1

No, posso usare i costrutti Android standard, ma ho già 15 Attività che devo toccare ora. La risposta potrebbe essere solo "il modo di farlo". – Jakob

Problemi correlati