2017-04-26 3 views
0

Es gibt viele Antworten auf diese Fragen, aber technisch meine Frage ist anders, ich habe einige Dokumentation gelesen und vereinbart, dass wir nicht mehrere Fragmente in nur einer Aktivität verwenden sollten, sollten wir mehrere Aktivitäten mit mehreren verwenden Fragmente sind abhängig von Projektanforderung oder UI-Spezifikation, so Architektur meiner Anwendung ist 1. BaseActivity und alle erstreckt Aktivitäten von diesem 2. BaseFragment und alle Fragmente erstreckt sich von diesem mein Code:Beste Art, Fragmente zu verwenden

in BaseActivity ich gemacht habe folgende Funktionen

public void replaceFragment(int containerViewId, Fragment fragment, String fragmentTag, boolean addToBackStack) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace(containerViewId, fragment, fragmentTag); 
    if(addToBackStack) 
     fragmentTransaction.addToBackStack(fragmentTag); 
    if(fragmentTag.matches("") && addToBackStack) 
     fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 
} 

hinzufügen Fragment in Framelayout

public void addFragment(int containerViewId, Fragment fragment, String fragmentTag, boolean addToBackStack, boolean isPending) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.add(containerViewId, fragment, fragmentTag); 
    if(addToBackStack) 
     fragmentTransaction.addToBackStack(fragmentTag); 
    if(fragmentTag.matches("") && addToBackStack) 
     fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 
    if(isPending) 
     fragmentManager.executePendingTransactions(); 
} 

Zurück Presse Funktionalität

public void popBackStackImmediate() { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.popBackStackImmediate(); 
} 

Gesamt Fragmente

public List<Fragment> fragmentList(){ 
    return getSupportFragmentManager().getFragments(); 
} 

und die Strömung ist fragmenta (add) -> FragmentB (ersetzen) ->

QUET SION 1: Warum zeigen TotalFragments 2? während ich FragmentB ersetzt habe A

FRAGE 2: wenn ich zurück drücke Taste zeigt immer noch 2 Fragmente und wie kann ich vom Stapel entfernen?

Frage 3: FragmentB ist sichtbar, aber auch fragmenta Zyklus Fragment Lebensdauer ..means onResume und onCreate funcations rufen zu seltsam, aber wahr weiß nicht, warum

Antwort

0

Frage 1: Sie jedes Fragment nicht entfernt haben daher das Fragment Zahl 2. Wenn Sie ein Fragment ersetzen, ersetzen Sie es im Fragmentcontainer, nicht in der Instanz.

Frage 2: Sobald Sie dem Backstack ein Fragment hinzugefügt haben, bedeutet dies, dass Sie zu ihm zurück navigieren werden, sobald Sie auf die Zurück-Schaltfläche klicken. Dennoch ist die Anzahl der Fragmentmanager-Fragmente immer noch 2, da kein Fragment entfernt wurde. Wenn Sie es der folgende Code entfernen möchten wird der Trick:

getSupportFragmentManager().beginTransaction().remove(yourFragment).commit(); 

Frage 3: Sobald Sie Fragment A mit Fragment B, Fragment A ersetzen wird immer noch aktiv sein und nennen es , onDestroy und onDestroyView, wenn Sie bringen es zurück in den Container es beginnt seinen Lebenszyklus von onCreateView, das bedeutet, dass onResume läuft normal ist, aber onCreate ist nicht.