Autore Topic: Distruggere un activity in modo "controllato"  (Letto 1483 volte)

Offline Phate

  • Utente junior
  • **
  • Post: 123
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy S
  • Sistema operativo:
    Windows 7
Distruggere un activity in modo "controllato"
« il: 12 Agosto 2012, 12:26:20 CEST »
0
Ok, ecco il problema: ho una listview con diverse celle, chiamiamo questa activity A.
A ogni click su una cella mi si apre un'activity B con info più dettagliate.

In questa nuova activity è possibile tornare alla precedente (lista) in due modi: o premendo  il tasto "indietro" (ovviamente!) o premendo il tasto "torna alla lista" fatto da me, quest'ultimo richiama la prima con startActivity.

Ora, visto che le celle possono essere tante, io vorrei, quando passo da B ad A, distruggere B altrimenti a lungo andare mi ritrovo lo stack pieno di activity B.
Però come faccio ad esempio a chiamare finish() dopo startActivity? Non posso metterlo in onStop perché potrebbe anche succedere che l'utente decida di premere il tasto home, oppure che il cell vada in standby, ecc.
In questi casi non voglio certo distruggere B !

Help! :D

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Distruggere un activity in modo "controllato"
« Risposta #1 il: 12 Agosto 2012, 12:30:36 CEST »
0
le activity sono gestite a stack, nel senso che tu metti la activity A e hai

0 - A

Poi A lancia B quindi hai:

1-B
0-A

Quando distruggi B questa viene eliminata dallo stack e torni alla A:

0-A

Quindi in teoria se ho capito il tuo problema è sufficiente, quando premi il bottone per uscire, terminare l'activity B con finish(). Il "trucco" sta nel non far ripartire l'activity A.

Offline Phate

  • Utente junior
  • **
  • Post: 123
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy S
  • Sistema operativo:
    Windows 7
Re:Distruggere un activity in modo "controllato"
« Risposta #2 il: 12 Agosto 2012, 12:46:33 CEST »
0
Ma startActivity è una chiamata "senza ritorno", nel senso che se faccio tipo
Codice: [Seleziona]
startActivity(intent);
finish();

il finish() finale non viene eseguito...o no?O.o

Cmq se mi sbaglio, e spero di sbagliarmi, qual'è l'evento associato alla pressione di "indietro", così che posso inserire finish anche li?

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Distruggere un activity in modo "controllato"
« Risposta #3 il: 12 Agosto 2012, 12:50:28 CEST »
+1
Se ho capito bene il problema il punto è proprio che non devi fare la startactivity se sei arrivato lì dall'activity A.

Da A sei andato in B, fermi B con la finish e automaticamente ritorni alla A.

Per la seconda domanda se vuoi intercettare il tasto back devi ridefinire onBackPressed().
Ma in realtà potresti anche non ridefinirla perchè apparentemente la pressione del tasto back fa già quello che ti serve, cioè fermare la activity B e tornare alla A.

 ;-)

Offline Phate

  • Utente junior
  • **
  • Post: 123
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy S
  • Sistema operativo:
    Windows 7
Re:Distruggere un activity in modo "controllato"
« Risposta #4 il: 12 Agosto 2012, 12:53:15 CEST »
0
Vero, geniale! :D
Su onBack non ho la certezza che faccia finish() magari aspettiamo qualcuno che ne sa di più!

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Distruggere un activity in modo "controllato"
« Risposta #5 il: 12 Agosto 2012, 16:17:16 CEST »
+1
Dai sorgenti di Android della classe "Activity":

 
Codice (Java): [Seleziona]
   /**
     * Called when the activity has detected the user's press of the back
     * key.  The default implementation simply finishes the current activity,
     * but you can override this to do whatever you want.
     */

    public void onBackPressed() {
        finish();
    }
adb logcat | tee /tmp/logcat | grep TAG

Offline Phate

  • Utente junior
  • **
  • Post: 123
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy S
  • Sistema operativo:
    Windows 7
Re:Distruggere un activity in modo "controllato"
« Risposta #6 il: 12 Agosto 2012, 17:29:27 CEST »
0
Ok, perfetto grazie a entrambi!
Edit:
Cmq in tutto ciò startActivity non è "senza ritorno" che razza di errore...
« Ultima modifica: 12 Agosto 2012, 20:29:17 CEST da Phate »