Salvare la posizione di una ScrollView in un Fragment

L’idea di scrivere un articolo su come salvare la posizione di una ScrollView mi è venuta a seguito del commento di Bhavin nell’articolo Tab Layout in Android con ActionBar e Fragment.
Bhavin chiedeva come si poteva ripristinare la posizione di una ScrollView nel passaggio fra una tab e l’altra.

Ecco una possibile soluzione:

  1. crea un progetto Android, package eu.lucazanini.scrollingtab e nessuna Activity predefinita
  2. modifica il file AndroidManifest.xml
  3. modifica il file res/values/strings.xml, per gestire le etichette e il loro contenuto
  4. crea il file res/layout/main.xml, dovrebbe essere quello di default
  5. crea i file res/layout/tab1.xml e res/layout/tab2.xml, che rappresentano il contenuto delle 2 tabs


    nella secondo layout è presente una ScrollView contenente una TextView con un testo molto lungo
  6. crea la classe eu/lucazanini/scrollingtab/ScrollingTabActivity.java, da notare che le etichette delle tabs appariranno in maiuscolo e che eventualmente è possibile inserire un’icona o una view con i metodi setIcon o setCustomView
  7. crea le classi eu/lucazanini/scrollingtab/Tab1Fragment.java e eu/lucazanini/scrollingtab/Tab2Fragment.java

  8. lancia l’applicazione

Nell’evento onPause del Fragment contenente la ScrollView salvo nella variabile “yPos” il valore dello spostamento della ScrollView lungo l’asse delle y, nell’evento onResume recupero il valore della variabile “yPos” e imposto lo spostamento della ScrollView.
Devo usare il codice

per eseguire lo scroll, il semplice uso del metodo scrollTo(…) non funziona.
Questo esempio presuppone che il Fragment non venga distrutto fra una chiamata e l’altra quindi, ad esempio, il ripristino della posizione della ScrollView non è eseguito se l’utente chiude e riavvia l’attività principale.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.