2016-07-11 6 views
0

Ich bin nicht in der Lage, dieses Verhalten von Fragment ersetzen zu verstehen. In meiner Anwendung bewege ich mich von FragmentA zu FragmentB dann FragmentC und dann FragmentX und von FragmentX Ich bewege FragmentD und ich halte FragmentX nicht im Backstack, aber wenn ich Fragmente knipse, wird FragmentX auch so genannt, wie andere Fragmente genannt werden (zu Testzwecken) Ich habe die onCreate() -Methode jedes Fragments angemeldet. Ich habe gelesen, wenn ein Pop-out-Fragment onCreate() dieses Fragments aufgerufen wird. Ich verwende den folgenden Code zum Ersetzen von Fragmenten.Seltsame Bevoir des Ersetzens Fragment in Android

public void replaceFragment(BaseFragment fragment,boolean isToAddBackStack){ 
baseFragment = fragment; 
FragmentTransaction fragmentTransaction = fm.beginTransaction(); 

fragmentTransaction.replace(R.id.fragment_controller, fragment,  fragment.getName()); 
if(isToAddBackStack) 
    fragmentTransaction.addToBackStack(fragment.getName()); 
else 
    fragmentTransaction.addToBackStack(null); 

fragmentTransaction.commit(); 
} 

Und ich unten Code verwenden für Fragmente kacken, weil ich Benutzer nicht will zurück zu navigieren, deshalb hat ich mich kacken nicht fragmentX in der Liste der FragmentManager gefunden habe, aber immer noch FragmentX ist gekackt out.Below ist der Code I

public void clearBackStack(){ 
    for(int i = 0; i < fm.getBackStackEntryCount(); ++i) { 
     fm.popBackStack(); 
    } 
} 

Meine Fragen der Fragmente für kacken aus verwende werden, warum FragmentX während Fragmente knallend aus aufgerufen wird, wenn ich nicht, dass im Backstack bin zu halten, ist es eine andere Art und Weise Fragment von knallend aus (wenn ich sprich rausspringen, ich meine das Zurückräumen).

Hinweis: Wenn ich den Stack zurückhole, wie ich bereits erwähnt habe, halte ich FragmentX nicht im Backstack, Fragment's onCreate() wird aufgerufen und dann wird meine Benutzeroberfläche gehängt. Ich kann den Grund nicht finden. Irgendeine Hilfe?

Antwort

1

Ihr Problem liegt in diesem Teil des Codes -

if(isToAddBackStack) 
    fragmentTransaction.addToBackStack(fragment.getName()); 
else 
    fragmentTransaction.addToBackStack(null); 

fragmentTransaction.addToBackStack(null) aufrufen, bedeutet nicht, dass die Transaktion nicht auf die Rückseite Stapel hinzugefügt werden. Es bedeutet, dass die Transaktion hinzugefügt wird, aber ohne einen Namen.

Entfernen Sie die Else-Anweisung aus Ihrem Code, und es sollte funktionieren.

+0

Eine Sache, die hier erwähnt werden muss Ich habe das bereits versucht, wie Sie erwähnt haben, aber das gleiche bevour fand ich. –

+0

@AbdulWaheed Warum versuchen Sie nicht, den obigen Code zu verwenden und statt den Backstack selbst zu öffnen, lassen Sie den Fragmentmanager damit umgehen, d. H. Wenn die Zurück-Taste gedrückt wird, ruft der Fragmentmanager automatisch den letzten Eintrag auf dem Backstack auf. – Rohan

+0

, weil ich den Fluss beschränken möchte, wenn ein Benutzer auf Fragment a ist, und b Benutzer zurückgehen kann, aber wenn Benutzer auf Fragment c kommt Ich möchte nicht, dass Benutzer vorher Fragment gehen, deshalb pooping bin ich –