Autore Topic: Lanciare il Resume di un'Activity  (Letto 1895 volte)

Offline tsubaiam

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
Lanciare il Resume di un'Activity
« il: 17 Gennaio 2011, 13:02:12 CET »
0
Ciao a tutti!
Dunque, nella mia applicazione visualizzo un menu fisso con 3 Button, ognuno dei quali permette di lanciare un'activity.
Quindi dall'activity A, tramite il menu fisso a 3 bottoni, è possibile lanciare l'attività B o la C; dalla B è possibile lanciare la A o la C, e così via.
A livello di sorgente il frammento di codice (funzionante) che implementa questo comportamento è molto semplicemente questo:
Codice (Java): [Seleziona]
public void onClick(View v){
        if(v.equals(A))
                Intent i = new Intent().setClass(this, A.class);
        if(v.equals(B))
                Intent i = new Intent().setClass(this, B.class);
        if(v.equals(C))
                Intent i = new Intent().setClass(this, C.class);
       
        this.startActivity(i);
 }

Io però non vorrei lanciare l'activity ogni volta ma, al click sul bottone, vorrei far ripartire l'activity dal'onResume invece che dall'onCreate tutte le volte.
Vorrei quindi sapere se c'è un qualche modo per implementare una sorta di "resumeActivity" (che non mi pare esista  :-)) da utilizzare al posto di startActivity();
« Ultima modifica: 17 Gennaio 2011, 13:04:53 CET da tsubaiam »

Offline paolino1986

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc HERO
  • Sistema operativo:
    Windows 7
Re:Lanciare il Resume di un'Activity
« Risposta #1 il: 31 Gennaio 2011, 11:12:13 CET »
0
Ciao, è da poco che programmo anche io su android quindi quanto ti dico prendilo con le pinze  ;-)
ma guardando lo schema del ciclo di vita di un activity http://developer.android.com/reference/android/app/Activity.html mi è parso di capire che il metodo onCreate venga avviato solo la prima volta e successivamente quanto tu passi da un activity all'altra che è già stata visualizzata almeno una volta il tutto riparta dal metodo onStart() a meno che l'attività che lasci non venga killata....ovviamente devi ridefinire i metodi di tuo interesse, li trovi tutti nel link sopra.
« Ultima modifica: 31 Gennaio 2011, 11:15:58 CET da paolino1986 »

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Lanciare il Resume di un'Activity
« Risposta #2 il: 31 Gennaio 2011, 11:48:07 CET »
0
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline tsubaiam

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
Re:Lanciare il Resume di un'Activity
« Risposta #3 il: 01 Febbraio 2011, 10:02:44 CET »
0
prova a leggere qui:
Application Fundamentals | Android Developers
Grazie, ti devo una cena...la risposta stava qui!  :-)
Ho risolto settando il launcherMode dell'activity nel manifest a singleTask. In questo modo al primo caricamento dell'activity vengono chiamati in sequenza i metodi onCreate(), onStart(), onResume(); ai caricamenti successivi non si passa più dall'onCreate() (e quindi non si crea più una nuova Activity), ma viene ripristinata quella già esistente; i metodi chiamati sono infatti onRestart(), onStart(), onResume().
Da quello che ho letto nella pagina che mi hai linkato pensavo però che questo risultato si potesse ottenere settando solo il launcherMode a "singleTop". Con singleTop viene invece comunque chiamato l'onCreate()...mi potresti spiegare meglio la differenza tra launcherMode multiple, singleTop, singleTask e singleInstance? Grazie mille per la disponibilità e la pazienza  :D

@paolino1986
grazie per il suggerimento, ma in realtà lasciando le impostazioni di default dell'activity (e cioè il launcherMode a "multiple") ogni volta che all'interno del codice viene chiamato il metodo startActivity, viene creata una nuova activity e messa in cima allo stack, non ripristinata quella già esistente. Quello che dici tu avviene, ad esempio, alla pressione del tasto back o se ti muovi tra i tab di un TabLayout (l'activity che stava in pausa viene messa in cima allo stack e ritorna visibile), ma non avviene se chiamo il metodo startActivity, lanciando un'Activity già esistente.
Almeno, credo che il comportamento di default sia questo...se così non fosse, lieto di essere smentito e corretto  :-)