Ich versuche zu vermeiden Zugabe des gleichen Fragments zu Backstack mit dieser Methode:vermeiden Versuch, zweimal gleiche Fragment in den Backstack, popBackStackImmediate immer false zurück
public static void replaceFragment(FragmentManager fragmentManager, Fragment fragment, Boolean addToBackStack) {
String backStateName = fragment.getClass().getName();
boolean fragmentPopped = fragmentManager.popBackStackImmediate(backStateName, 0);
if (addToBackStack && !fragmentPopped && fragmentManager.findFragmentByTag(backStateName) == null) {
fragmentManager
.beginTransaction()
// .setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right, android.R.anim.fade_in, android.R.anim.fade_out)
.replace(R.id.container, fragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack(backStateName) // was 'backStateName'
.commit();
} else {
if (!addToBackStack)
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragmentManager
.beginTransaction()
// .setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right, android.R.anim.fade_in, android.R.anim.fade_out)
.replace(R.id.container, fragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.disallowAddToBackStack()
.commit();
}
}
Navigationsleiste enthält: Image mit profilePhoto
die ProfileMainFragment
und wenige eröffnet Kategorien, die MainFragmentCategory
öffnet. Boolean addToBackStack
ist false
wenn Fragment aus navigationDrawerMenu
und true
gewählt wird, wenn innerhalb Fragment (move MainFragmentCategory
-DetialFragmentCategory
) oder auf profilePhoto
in navigationDrawer
gewählt wird.
fragmentPopped
ist immer false
, warum ist das so? Auch wenn ich profilePhoto
und wieder profilePhoto
in navigationDrawer
klicke. Es sollte vermieden werden, es backStack für eine zweite (und dritte und vierte ...) Zeit hinzuzufügen, aber es tat es nicht.
Irgendeine Idee, wie kann ich es richtig machen?
Darf ich fragen, was Sie erreichen möchten, um zu verhindern, dass dasselbe Fragment zweimal zu backStack hinzugefügt wird? BackStack ist wie Navigationshistroy. Wenn der Benutzer von A> B> A> C geht, drückt der Benutzer in C zurück. Er sollte zurück zu A statt zu B gehen. – Joshua
Ich möchte etwas wie das vermeiden: A> B> B> B und es so aussehen lassen dies: A> B. – y07k2
Wie sieht es aus, wenn der Benutzer auf die Schublade klickt, überprüfen Sie die aktuelle Frage. Wenn es das gleiche ist, dann ersetzen Sie es nicht. – Joshua