Android: Master / Detail-Flow (Dual-Bereich) mit 1 Aktivität

8

Wie im Android-Handbuch berichtet, dual-pane kann auf zwei Arten erreicht werden:

  1. Mehrere Fragmente, eine Aktivität
  2. Mehrere Fragmente, mehrere Aktivitäten

Ich verwende den ersten Fall (das Android-Handbuch erklärt nur den zweiten Fall).

Dies geschieht auf 7 "Tablets :

  • rotierende von Querformat zu Hochformat : Nur das Einzelfragmentfragment wird neu erstellt
  • Drehen von von Hochformat auf Querformat : alle drei Fragmente (Einfenster, Doppelfenster-Master, Doppelfenster-Detail) werden neu erstellt

Frage: Warum ist das Einzelfragmentfragment (das ich programmatisch erstelle, aber ein im Layout als Container definiertes FrameLayout verwendet) in zwei Fenstern neu erstellt?

Ich berichte unter meiner Implementierung:

/layout/activity_main.xml:

%Vor%

/layout-w900dp/activity_main.xml:

%Vor%

Dies ist die onCreate in der Hauptaktivität:

%Vor%     
Daniele B 21.08.2014, 15:31
quelle

2 Antworten

5

Ich fand es viel besser , die Fragmente im Code auch für das Doppelfenster hinzuzufügen.

Statt also <fragment> zu verwenden, verwenden Sie auch <FrameLayout> für die Dual-Fenster-XML.

/layout-w900dp/activity_main.xml:

%Vor%

Auf diese Weise können Sie nur eine Instanz von masterFragment und von DetailFragment verwenden, sodass Sie nicht auf das Problem stoßen, mehrere Instanzen desselben Fragments zu haben.

Um dies zu tun, müssen Sie in OnCreate die Fragmente zum Container hinzufügen, die sich vom alten Container lösen:

%Vor%

mit diesen Funktionen:

%Vor%     
Daniele B 17.05.2015, 14:36
quelle
0

Beim Drehen werden die aktuell aktiven Fragmente vom FragmentManager gespeichert und zum automatischen Erstellen von Fragmenten verwendet, wenn die neue Aktivität erstellt wird. Sie können die Wiederherstellung verhindern, indem Sie den savedInstanceState nicht an die Super-Methode übergeben. Z.B. %Code%.

Alternativ, wenn Sie den Status mithilfe der FragmentCreate-Methode (savedInstanceState) wiederherstellen müssen (die FragmentManager.restoreAllState () aufruft) - siehe Ссылка ), können Sie Ihr Fragment-Tag nachschlagen und es manuell in Ihrem onCreate entfernen. Dies ist der Fall, da Sie ein nicht-ui-Fragment haben, das Sie wiederherstellen möchten. Die Wiederherstellung beibehaltener Fragmente hängt auch vom Aufruf von FragmentActivity.onCreate (savedInstanceState) mit saveInstanceState! = Null ab.

Die Wiederherstellung geschieht, weil Sie normalerweise das aktive Fragment herum behalten möchten (und möglicherweise ein zweites Detailfenster im Fall von Tablets hinzufügen).

%Vor%     
quelle