Autore Topic: Salvare stato su cambio orientazione schermo  (Letto 1714 volte)

Offline white$hark

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Nexus4
  • Sistema operativo:
    Windows 7
Salvare stato su cambio orientazione schermo
« il: 27 Marzo 2014, 11:50:12 CET »
0
Avevo un'activity che appena aperta mostrava un'animazione su un determinato punto di una mappa. Se spostavo la vista su un altro punto, quando cambiavo orientazione del cellulare, mi riportava al punto iniziale. Inoltre perdevo anche lo stato di un button.

Per salvare facilmente il cambio di configurazione si può agire sul manifest, in questo modo:

Codice (XML): [Seleziona]
<activity
           android:name="MyActivityName"
           android:configChanges="orientation|screenSize"
           android:label="@string/app_name" >
        </activity>

che è valido anche per il cambio di taglia dello schermo.  ;-)

ATTENZIONE
Come suggerisce @GabMarioPower con questo metodo i cambi di layout, dimensioni e impostazioni che si verificano quando si cambia orientamento saranno a carico nostro, non del sistema.
« Ultima modifica: 27 Marzo 2014, 12:48:50 CET da white$hark »

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Salvare stato su cambio orientazione schermo
« Risposta #1 il: 27 Marzo 2014, 12:08:42 CET »
+1
Io starei molto attento ad usare questo attributo.

Le activity quando c'è un cambio da verticale a orizzontale (e viceversa) di default vengono ricreate.
Utilizzando android:configChanges le activity rimangono attive e viene lanciato il metodo onConfigurationChanged() dove tu stessi dovrai farti carico di gestire il cambio.

Ti consiglio di leggere questo link:
Handling Runtime Changes | Android Developers

Nel cambio di rotazione,in generale possono succedere tante cose.
Potresti voler utilizzare layout diversi, dimensioni diversi (dimens.xml)..... e su un tablet questo capita molto spesso. Il sistema ricreando l'activity gestisce in autonomia queste cose.
Utilizzando  android:configChanges="orientation|screenSize" questo non avviene più ed a carico tuo gestirle.

Dipende da cosa si sta facendo, ma se l'obiettivo è salvarsi lo stato di alcuni elementi (e il punto della mappa è uno di questo) in modo tale che dopo la  rotazione si mantengano gli stessi valori, l'approccio più corretto è quello di usare i metodi  onSaveInstanceState() per salvare e onRestoreInstanceState()/onCreate() per ripristinarli.

Offline white$hark

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Nexus4
  • Sistema operativo:
    Windows 7
Re:Salvare stato su cambio orientazione schermo
« Risposta #2 il: 27 Marzo 2014, 12:41:37 CET »
0
Grazie mille per la spiegazione e i consigli. Non sono ancora molto esperto nella programmazione per android, ma sto creando un programma di prova per testare alcune cose e la prima soluzione funzionante la dò per buona.
Proverò comunque ad apportare le modifiche secondo i tuoi suggerimenti ;)

Però una volta ottenuto un percorso tra 2 punti, come faccio a salvarlo?
« Ultima modifica: 27 Marzo 2014, 12:45:37 CET da white$hark »