private void removeCurrentRouterScreen() { if (screen != null) { screen.getScreenFragmentManager().removeOnBackStackChangedListener(this); screen = null; currentFragment = null; } }
@Override protected void onDestroy() { super.onDestroy(); FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.removeOnBackStackChangedListener(mListener); }
@Override public void onPause() { super.onPause(); getSupportFragmentManager().removeOnBackStackChangedListener(this::updateDrawerToggle); }
final FragmentManager fm = mHostingActivity.getSupportFragmentManager(); fm.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Override public void onBackStackChanged() { if (fm.getBackStackEntryCount() == 0) { Fragment fragmentB = fm.findFragmentByTag("FragmentB"); Fragment fragmentC = fm.findFragmentByTag("FragmentC"); if (fragmentB != null) { //Hmm force detach here rather than when we pop via the up affordance if (!fragmentB.isDetached()) fm.beginTransaction().detach(fragmentB).commit(); } if (fragmentC != null) { if (!fragmentC.isDetached()) fm.beginTransaction().detach(fragmentC).commit(); } //Listened for any changes after re-entering the FragmentA so we can remove the listener fm.removeOnBackStackChangedListener(this); } } });
public static void performNoBackStackTransaction(FragmentManager fragmentManager, String tag, Fragment fragment) { final int newBackStackLength = fragmentManager.getBackStackEntryCount() +1; fragmentManager.beginTransaction() .replace(R.id.content, fragment, tag) .addToBackStack(tag) .commit(); fragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Override public void onBackStackChanged() { int nowCount = fragmentManager.getBackStackEntryCount(); if (newBackStackLength != nowCount) { // we don't really care if going back or forward. we already performed the logic here. fragmentManager.removeOnBackStackChangedListener(this); if ( newBackStackLength > nowCount ) { // user pressed back fragmentManager.popBackStackImmediate(); } } } }); }
public static void performNoBackStackTransaction( final FragmentManager fragmentManager, String tag, Fragment fragment) { final int newBackStackLength = fragmentManager.getBackStackEntryCount() +1; fragmentManager.beginTransaction() .replace(R.id.content_frame, fragment, tag) .addToBackStack(tag) .commit(); fragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Override public void onBackStackChanged() { int nowCount = fragmentManager.getBackStackEntryCount(); if (newBackStackLength != nowCount) { // we don't really care if going back or forward. we already performed the logic here. fragmentManager.removeOnBackStackChangedListener(this); if ( newBackStackLength > nowCount ) { // user pressed back fragmentManager.popBackStackImmediate(); } } } }); }