2015-02-05 14 views
6

La mia app Android ha un'impostazione del flusso di registrazione con un'attività e carico i passaggi come frammenti nel layout dell'attività.Come ricaricare i frammenti nel backstack dopo il cambio di orientamento

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    tools:context="com.example.android.ui.RegisterActivity"> 

    <LinearLayout 
     android:id="@+id/register_container" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"></LinearLayout> 

</RelativeLayout> 

Ora ogni classe frammento implementa un'interfaccia pubblica implementato nel RegisterActivity in modo che io conosco per caricare il frammento successivo passo e aggiungere il nuovo frammento alla backstack

mFragmentTransaction.addToBackStack(mStepOne.TAG); 

ora tutto funziona benissimo in tutto 4 passaggi e posso tornare indietro attraverso i passaggi pur mantenendo i dati immessi in ogni frammento SE rimane nello stesso orientamento (portait)

MA una volta ho chang e l'orientamento, il punto di vista frammento scompaiono

se sono fino al punto 3, posso ancora colpire il pulsante indietro e sarà tornare indietro mi mostra il frammento che è destinato a essere lì visualizzando la backstack cambiato ascoltatore

Il conteggio e i tag dei frammenti vengono mantenuti ma non le viste. RegisterActivity onCreateView carica i termini frammento nella vista ed è ciò che rimane in vista durante la navigazione di nuovo attraverso i passaggi.

mFragmentManager = getSupportFragmentManager(); 
mFragmentTransaction = mFragmentManager.beginTransaction(); 
mTerms = new RegisterFragmentTerms(); 
mFragmentTransaction.add(R.id.register_container, mTerms); 
mFragmentTransaction.commit(); 

Mi sembra che le viste siano caricate in RegisterActivity l'una sopra l'altra e cancellate dal cambio di orientamento. È possibile risolvere ciò che sto cercando di fare? o l'ho implementato in modo errato? E 'la mia prima applicazione Android :)

Acclamazioni

risposta

6

Sembra essere causato da attività ricreative attività. Hai mai aggiunto android:configChanges="orientation|keyboardHidden|screenSize" nel tuo AndroidManifest.xml alla tua attività? , se aggiungi questo flag all'attività, non verrà distrutto quando cambi di orientamento e lo stack dei frammenti non scomparirà.

+0

E 'stato semplicemente così facile lol, acclamazione amico, Questo è quello che ottieni quando impari qualcosa di nuovo :) – CaptRisky

+0

** Per altre persone che leggono questo, questa non è una soluzione sicura. ** Ci sono altri scenari in cui Android ucciderà la tua attività. Ad esempio, quando vengono utilizzate altre app affamate di risorse mentre l'app è ridotta a icona. –

+0

@ G.Steigert, se è solo per il cambio di orientamento, è probabilmente sicuro, mentre per il ripristino dello stato dopo la ricreazione delle attività o il riavvio del processo, questo è sicuramente un altro argomento. – jobcrazy

Problemi correlati