Passa ai contenuti principali

Android Studio - Ripristino dell'Activity

In questo articolo vedremo come poter ripristinare l'Activity a seguito di un cambiamento di configurazione (come l'orientamento dello schermo, la disponibilità della tastiera e quando l'utente attiva la modalità multi-finestra).

Maggiori informazioni si possono trovare a questo indirizzo (in inglese)

Quando l'Activity inizia a fermarsi, il sistema chiama la funzione onSaveInstanceState() in modo che l'Activity possa salvare le informazioni sullo stato. L'implementazione predefinita di questa funzione salva informazioni transitorie sullo stato della gerarchia di visualizzazione dell'Activity, come il testo in una EditText o la posizione di una SeekBar, ecc.

Vediamo un'esempio:
Ecco come si presenta il file activity_main.xml Ecco come si presenta il file MainActivity.kt Ed ecco il risultato:
Avvio dell'app
Pulsante Calcola premuto
Orientamento dello schermo cambiato da portrait a landscape o viceversa


Se si preme il pulsante "Calcola" viene aggiornato il calcolo nella TextView ma se ruotiamo lo schermo il calcolo viene aggiornato tramite le righe 20 e 21 inizializzando le due variabili ai valori impostati alle righe 10 e 11.
Una soluzione potrebbe essere quella vista in questo articolo impostando l'attributo: ma comporta alcuni svantaggi come ad esempio:
Se abbiamo definito più layout in base al dispositivo utilizzato, questo non viene caricato quando orientiamo lo schermo.

Quindi la soluzione potrebbe essere quella dell'utilizzo di onSaveInstanceState() ecco come: tramite l'attributo outState.putInt("nome etichetta", variabile) e possibile salvare la variabile di tipo Int in un "cassetto" dal nome che viene definito in "nome etichetta".
Importante sapere che per ogni tipo di variabile (Int, Double, String, ecc.) occorre modificare outState.put... ecco alcuni esempi:
poi occorre richiamare le variabili memorizzate tramite la funzione onRestoreInstanceState() Anche in questo caso in base al tipo di variabile che vogliamo richiamare occorre specificarne il tipo in savedInstanceState.get... dove al posto dei puntini occorre scrivere: Int, Double, String, ecc.

N.B. La funzione onRestoreInstanceState() viene richiamata subito dopo onStart() e prima di onResume() quando l'Activity viene reinizializzata da uno stato precedentemente salvato, fornito in saveInstanceState(). La maggior parte delle implementazioni utilizzerà semplicemente onCreate() per ripristinare il loro stato, ma a volte è conveniente farlo qui dopo che è stata eseguita tutta l'inizializzazione o per consentire alle sottoclassi di decidere se utilizzare l'implementazione predefinita. L'implementazione predefinita di questo metodo esegue un ripristino di qualsiasi stato di visualizzazione precedentemente salvato da onSaveInstanceState().
Questa funzione viene chiamata solo quando si ricrea un'Activity; questa funzione non viene chiamata se onStart() viene chiamato per qualsiasi altro motivo.

Quindi è molto importate sapere in quale funzione (si raccomanda onResume() per migliori prestazioni) implementare la propria app in modo da poter sfruttare onRestoreInstanceState() per questo motivo fare riferimento a questo articolo.

Vediamo un esempio pratico:
Ecco come si presenta il file MainActivity.kt Da notare rispetto al codice precedente come le righe di codice: sono state spostate dalla funzione onCreate() alla funzione onResume() altrimenti onRestoreInstanceState() non avrebbe effetto se fossero rimaste all'interno della funzione onCreate().

Avvio dell'app
Pulsante Calcola premuto
Orientamento dello schermo cambiato da portrait a landscape o viceversa


Download Project
Download file APK


Commenti

Post popolari in questo blog

Arduino - Lampeggio Led (delay vs. millis)

Cosa sono delay() e millis()? Delay() è una funzione che mette in pausa il programma per un determinato tempo espresso in millisecondi, così facendo viene interrotta l'esecuzione del programma e se abbiamo un dispositivo in ingresso che durante il tempo di pausa cambia di stato il programma non se ne accorge fino a quando non ricomincia l'esecuzione dall'inizio. La struttura di delay è: delay(1000);   da inserire nel punto dello sketch in qui si vuole interrompere il programma in questo modo il programma viene messo in pausa per 1000 millisecondi = 1 secondo. Per saperne di più Millis() è una funzione che permette di sapere da quanto tempo è in funzione il microprocessore di Arduino UNO. In questo modo il programma non andrà mai in pausa ed è sempre in esecuzione, perché millis memorizza il tempo trascorso dall'avvio e poi per eseguire una determinata funzione si fa un controllo del tempo iniziale e il tempo trascorso. Per saperne di più Vediamo un esempi

Arduino - Utilizzo potenziometro e display LCD

Leggere il valore di un poteziometro (parte 1) Il potenziometro è un componente molto utilizzato in elettronica in quanto il suo uso permette di regolare una tensione variabile (in questo caso 0 - 5 Volt) in ingresso al microcontrollore. Il potenziometro va collegato secondo lo schema qui sotto al pin analogico A0 di Arduino.

Arduino - Lettura tensione potenziometro e display LCD

Leggere il valore di un poteziometro (parte 2) Oggi vedremo come leggere il valore in tensione di un potenziometro collegato al pin Analogico A0 di Arduino.