Autore Topic: onSaveInstanceState ed onRestoreInstanceState  (Letto 1176 volte)

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
onSaveInstanceState ed onRestoreInstanceState
« il: 02 Marzo 2012, 12:43:05 CET »
0
Ho necessità di salvare delle variabili quando l'activity va in pausa, avevo pensato ad onSaveInstanceState per salvarle e onRestoreInstanceState per ripristinarle ma a quanto ho capito onRestoreInstanceState non viene sempre chiamato.....come devo fare allora secondo voi ? (non ditemi che usate le Preference!)

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:onSaveInstanceState ed onRestoreInstanceState
« Risposta #1 il: 03 Marzo 2012, 13:41:43 CET »
0
Ho necessità di salvare delle variabili quando l'activity va in pausa, avevo pensato ad onSaveInstanceState per salvarle e onRestoreInstanceState per ripristinarle ma a quanto ho capito onRestoreInstanceState non viene sempre chiamato.....come devo fare allora secondo voi ? (non ditemi che usate le Preference!)
Ma dove vorresti salvarle?
Non ho ben capito cosa vuoi fare.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:onSaveInstanceState ed onRestoreInstanceState
« Risposta #2 il: 03 Marzo 2012, 14:36:31 CET »
0
Inoltre quando va in pausa non perdi lo stato delle variabili. Lo perdi quando viene distrutta.

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:onSaveInstanceState ed onRestoreInstanceState
« Risposta #3 il: 03 Marzo 2012, 15:36:22 CET »
0
Ma dove vorresti salvarle?
Non ho ben capito cosa vuoi fare.
Vorrei salvare il valore di akune variabili quando l'activity va in pausa per poi richiamarle quando si riavvia l'activity.

@Ricky lo só che non le perdo peró quando si riavvia l'activity quelle variabili assumono altri valori ed a me servono i precedenti.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:onSaveInstanceState ed onRestoreInstanceState
« Risposta #4 il: 03 Marzo 2012, 16:13:34 CET »
0
Allora, dipende un po' da cosa intendi di preciso.
Se per "riavviare" intendi che l'activity viene ricreata dopo essere stata distrutta per fare spazio ad altri programmi (ma è rimasta nello stack di navigazione) allora ti serve onSaveInstanceState e onRestoreInstanceState.
Altrimenti se ti serve persistere lo stato tramite preferences o database.

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:onSaveInstanceState ed onRestoreInstanceState
« Risposta #5 il: 03 Marzo 2012, 17:26:45 CET »
0
no in pratica l'activity dooo che si riavvia anche dall'onPause richiama in automatico un metodo che fa cambiare il valore di quelle variabili pee questo a me serve mwmorizzarle ogni qual volta k'activity va in onPause

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:onSaveInstanceState ed onRestoreInstanceState
« Risposta #6 il: 03 Marzo 2012, 20:37:06 CET »
0
no in pratica l'activity dooo che si riavvia anche dall'onPause richiama in automatico un metodo che fa cambiare il valore di quelle variabili pee questo a me serve mwmorizzarle ogni qual volta k'activity va in onPause
E allora nell'onPause te le salvi in nuove variabili e nell'onResume le ripristini. Dov'é il problema?
Postate il LogCat LogCat LogCat LogCat LogCat

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:onSaveInstanceState ed onRestoreInstanceState
« Risposta #7 il: 04 Marzo 2012, 01:56:33 CET »
0
Il problema è che l'activity quando si spegne lo schermo non sò perchè fa questo giro
1) onPause
2) onStop
3) onDestroy
e non capisco il motivo per cui va in onDestroy comunque perdo tutte le variabili che ho...

Offline ethaniel

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:onSaveInstanceState ed onRestoreInstanceState
« Risposta #8 il: 31 Marzo 2012, 10:48:19 CEST »
0
Ciao, ho avuto più o meno il tuo stesso problema; in particolare quando ruoto lo schermo l'activity viene distrutta e ricreata, cancellandomi i valori di variabili di cui necessito. Io per ora ho risolto così:
Codice (Java): [Seleziona]
        public void onCreate(Bundle savedInstanceState) {
                ...
                if (savedInstanceState != null)
                        getState(savedInstanceState); // recupero lo stato
                ...
        }

        protected void onSaveInstanceState(Bundle outState) {
                saveState(outState);
        }
Dove in saveState() e getState() eseguo il salvataggio e il recupero delle variabili che mi servono attraverso una serie di put...() e get...().
Visto che ci sono colgo l'occasione per chiedere a qualcuno più esperto se è una soluzione accettabile o c'è di meglio.
Grazie
« Ultima modifica: 31 Marzo 2012, 10:52:10 CEST da ethaniel »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:onSaveInstanceState ed onRestoreInstanceState
« Risposta #9 il: 31 Marzo 2012, 11:15:42 CEST »
0
Da quanto ne so io, questa è LA soluzione da applicare. ;)

Offline ethaniel

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:onSaveInstanceState ed onRestoreInstanceState
« Risposta #10 il: 31 Marzo 2012, 11:33:27 CEST »
0
Ah ok  :-) ma non c'è un modo per salvare l'intero "stato" dell'activity, piuttosto che salvare manualmente i valori di ogni variabile?
Mi spiego meglio: prendiamo il caso di una TextView il cui campo testo (inizialmente vuoto, o comunque con un valore di default) viene settato a runtime (col valore di una determinata variabile) ed in conseguenza di un certo evento (es. pressione di un bottone).
Se andassi a ruotare lo schermo, l'activity verrebbe distrutta, ricreata, e tornerei all'onCreate() con la mia TextView vuota (o comunque con testo default). Quindi nell'onCreate(), sul controllo (savedInstanceState != null) dovrei ricavarmi il valore della variabile (opportunamente salvata in precedenza) e ri-settare il valore della mia TextView con quella variabile. Premesso che questa soluzione dovrebbe funzionare, se avessi 10 TextView dovrei fare lo stesso lavoro per tutte? Da qui deriva la domanda di inizio post (sperando di non aver detto castronerie  :-P)

Offline paolone86

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung S5300
  • Play Store ID:
    Google Play
  • Sistema operativo:
    Windows XP
Re:onSaveInstanceState ed onRestoreInstanceState
« Risposta #11 il: 09 Novembre 2012, 10:03:13 CET »
0
grazie a ho risolto un problema analogo, nonostante tutto mi resta una mia grande curiosità... come mai, dopo la rotazione dello schermo, i dati inseriti dinamicamente in una TextView vengono distrutti mentre quelli in una EditText (dall'utente) no ?
Spero che qualcuno di voi di sia posto questa domanda....