2016-07-20 16 views
5

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?

+0

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

+0

Ich möchte etwas wie das vermeiden: A> B> B> B und es so aussehen lassen dies: A> B. – y07k2

+0

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

Antwort

6

Sie können den folgenden Code hinzufügen, bevor Sie Ihr Fragment ersetzen.

// Replace fragmentCotainer with your container id 
Fragment currentFragment = fragmentManager.findFragmentById(R.id.fragmentCotainer); 
// Return if the class are the same 
if(currentFragment.getClass().equals(fragment.getClass())) return; 
+1

Das brauche ich, danke! – y07k2