Sostituire un Fragment in un Tab Layout con ActionBar

Nell’articolo Tab Layout in Android con ActionBar e Fragment i fragment non possono essere cambiati in un momento successivo, in questo articolo riporto le modifiche necessarie per poter sostituire il primo fragment della prima tab con un terzo fragment usando un pulsante in runtime.

  1. Il progetto in Tab Layout in Android con ActionBar e Fragment è il punto di partenza, e la prima cosa da fare è aggiungere nuove stringhe al file /res/values/strings.xml
  2. modifica il layout per il primo fragment res/layout/tab1.xml per aggiungere il pulsante che sostituisce il fragment
  3. crea il layout per terzo fragment res/layout/tab3.xml
  4. crea la classe per il terzo fragment eu\lucazanini\Tab3Fragment.java
  5. modifica l’activity principale eu\lucazanini\TabActionBarActivity.java
  6. lancia l’app
    tab1_fragment3
    tab1_fragment1
    tab2_fragment2

Come funziona
E’ stato sovrascritto il metodo onAttachFragment, chiamato quando un fragment è allegato all’activity, qui aggiungo il nuovo fragment alla variabile fragList.
La parte più importante del lavoro è svolta dal metodo replaceFragment() della classe TabActionBarActivity che è chiamato quando l’utente preme i pulsanti a causa dell’attributoi in tab1.xml e tab3.xml android:onClick=”replaceFragment”.
Il codice fra le righe 126 e 143 è eseguito quando nel primo fragment è premuto il pulsante per aprire il terzo.
Questo codice si può dividere in due parti:

  1. la prima parte fra le righe 129 e 132 sostituisce il fragment corrente (il primo) con il terzo fragment (beginTransaction, replace e commit); osserva che il fragment three è aggiunto con tag label1=”one” e non “three”, perchè è inserito nella prima tab e il tag serve per capire a quale tab è stato assegnato il fragment
  2. la seconda parte fra le righe 134 e 141 rimuove il fragment che è stato sostituito dalla variabile fragList che contiene tutti i fragment che sono stati aggiunti

Un codice analogo è quello inserito nel case per il pulsante nel terzo fragment.
Nel metodo onTabSelected della classe interna TabListener mFragment è posto uguale a f se mTag coincide, cioè, nel caso di mTag=”one” (la prima tab) fragList potrebbe contenere o il fragment one o il fragment three, quindi mFragment è assegnato a uno di questi due fragment.

Scarica il progetto qui.

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.