2017-12-27 38 views
1

Hallo Ich war mit mehreren Fragment speichern und Wiederverwendung stecken.Fragment speichern und wiederverwenden: Mehrere Kind Fragmente mit TabView

  • My schenario

Ich habe 3 Tabs (ohne viewpager nur Fragment ändern) in one Activity und Laschen mit 2-4 Child-Fragmenten als wie in folgenden Abbildung dargestellt.

so, wenn ich Aktivität öffnen.
1) Tab1 laden und Anzeigen F1 Fragment.
2) tippen Sie auf Tab2 und zeigen F1 Fragment.
3) tippen Sie auf die Schaltfläche in F1 und gehen Sie zu Tab2s F2-Fragment
4) wiederholen Sie erneut Tippen Sie auf die Schaltfläche bei F2 und verschieben Sie Tab2 F3 Fragment.
5) jetzt I Tippen Sie auf Tab3 und öffnen Sie das F1-Fragment.

dieses 5 Arbeiten groß mit Backstack null

fragmentTransaction.addToBackStack(null); 

aber wissen,

6), wenn i Tab2 tippen Es wird immer F1 Fragment zeigen. Becase ich handle bei Aktivität wie unten Snippet.

switch (selected) { 
     case 0: 
      showFragment(TAB1.newInstance("", ""), TAG_HOME); 
      break; 
     case 1: 
      showFragment(TAB2.newInstance("", ""), TAG_FAV); 
      break; 
     case 2: 
      showFragment(TAB3.newInstance("", ""), TAG_ADD); 
      break; 
} 
  • Was ich brauche.

6) Ich brauche wie ich auf Tab2 Angenommen tippen zeigen Es F3 Fragment becase bei last time in diesem tab2 Opened F3 I-Fragment war.

So, wie Speicher Tab weise Fragment Backstrack zu behandeln.

Und ja Auch müssen wie unter Schritt (OnBackpress)

suppouse i in Tab 2 F1 bin -> F2 -> F3
nach zurück F3 drücken -> F2 (backpress) -> F1 (backpress) - > close Aktivität

enter image description here

Antwort

1

Sie können Stack of fragment in Hashmap speichern und abrufen, wenn Sie Tab ändern.

HashMap<String, Stack<Fragment>> mStacks = new HashMap<String, Stack<Fragment>>(); 
mStacks.put(AppConstants.TAB_A, new Stack<Fragment>()); 
mStacks.put(AppConstants.TAB_B, new Stack<Fragment>()); 
mStacks.put(AppConstants.TAB_C, new Stack<Fragment>()); 

Während Push-Fragment

mStacks.get(tag).push(fragment); 

Während Pop-Fragment

mStacks.get(mCurrentTab).pop(); 

Für die Arbeit Demo - Github

+0

OMG .. Huge Dank Meine Zeit zu sparen.verdient Upvote. –

Verwandte Themen