2016-07-13 3 views
0

Meine App hat kein XML. Es ist alles aus Java-Code dynamisch gemacht. In der App ist im Hochformat nur ein Bildschirm sichtbar - ein Fragment, das innerhalb einer FrameLayout innerhalb einer einzelnen Aktivität wechselt. Beim Drehen erhält die gleiche einzelne Aktivität eine weitere FrameLayout (auf der rechten Seite) für die Anzeige von zwei Bildschirmhälften.Zurückhalten des Stacks bei Konfigurationsänderungen in der dynamischen App mit einer einzigen Aktivität

Die App selbst hat einen Benutzerfluss von Fragmenten. Wenn ein Benutzer in den Querformatmodus wechselt, wird das Menü (ListFragment) in der linken Hälfte des Bildschirms angezeigt und die rechte Hälfte des Bildschirms ist leer.

Wenn ein Benutzer ein Element aus der ListFragment wählt (links) zeigt die rechte FrameLayout andere ListFragment oder FormFragment (dies hängt von JSON response). Wenn ein andere Liste im rechten FrameLayout zeigt, wenn ein Benutzer ein Element aus der Liste auswählt, jetzt geht diese ListFragment in links FrameLayout, und in den rechten Seite ist FormFragment usw.

So ist es ein „feiner Tanz“ die zu ersetzen, Fragmente in den linken und rechten FrameLayouts, die dann auf dem Backstack platziert werden. Wenn also ein Benutzer den Bildschirm in einem Moment dreht, muss der Backstack beibehalten werden, damit der Benutzer im Landscape Backstack zurückgehen kann.

Wenn ein Benutzer im Hochformat Modus ist, muss ich auch eine Möglichkeit, diesen Backstack beibehalten, wenn er von Querformat zu Hochformat dreht.

Das Problem:

Wie zu halten (halten), um die Backstack aller Fragmente, wenn ein Benutzer Bildschirm von Hoch- auf Querformat dreht, und umgekehrt, kann er so zurück, wie es keine Änderung war überhaupt.

Ist es möglich, dies in Android zu erreichen? Ich habe es mit setRetainInstance() versucht, aber ich habe auch gelesen, dass es nicht die Art ist, mit Backstack zu arbeiten, und ich bin auch sehr neu bei all dem, also wenn mir jemand bei diesem Problem helfen kann.

Vielen Dank im Voraus!

Antwort

1

können Sie addToBackStack() Methode für Fragment Transaktion Hinzufügen Stack zurück. Dies bedeutet, dass die Transaktion nach dem Commit gespeichert wird und ihre Operation rückgängig gemacht wird, wenn sie später vom Stack entfernt wird.

Code-Snippet:

FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace({your_Fragment_view}); 
    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 

Vergessen Sie nicht, die addToBackStack (null), so dass Ihr vorherigen Zustand zu tun, wird den Backstack hinzugefügt werden, so dass Sie mit der Zurück-Taste zurückzukehren.

Referenz Link - https://developer.android.com/reference/android/app/FragmentTransaction.html#addToBackStack(java.lang.String)

+0

Ja, ich bin mit, dass, wenn Fragmente in Laufzeit zu ersetzen. Meine App funktioniert gut, wenn es im Hoch- oder Querformatmodus ist, nur dass ich einen Weg brauche, wie man den gesamten Backstack während der Konfigurationsänderung erhält. – ravenns

Verwandte Themen