List of usage examples for android.support.v4.app FragmentManager popBackStackImmediate
public abstract boolean popBackStackImmediate(int id, int flags);
From source file:uk.co.nevarneyok.ux.MainActivity.java
/** * Method clear fragment backStack (back history). On bottom of stack will remain Fragment added by {@link #addInitialFragment()}. *///from w w w .j av a 2s. c o m private void clearBackStack() { Timber.d("Clearing backStack"); FragmentManager manager = getSupportFragmentManager(); if (manager.getBackStackEntryCount() > 0) { if (BuildConfig.DEBUG) { for (int i = 0; i < manager.getBackStackEntryCount(); i++) { Timber.d("BackStack content_%d= id: %d, name: %s", i, manager.getBackStackEntryAt(i).getId(), manager.getBackStackEntryAt(i).getName()); } } FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0); manager.popBackStackImmediate(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE); } Timber.d("backStack cleared."); // TODO maybe implement own fragment backStack handling to prevent banner fragment recreation during clearing. // http://stackoverflow.com/questions/12529499/problems-with-android-fragment-back-stack< }
From source file:org.comixwall.pffw.MainActivity.java
/** * Select the fragment to display./* w w w . j a va 2 s.c o m*/ * We modify the backstack ourselves so that no fragment is pushed to the backstack twice. * So if a fragment which is already in the backstack is selected, we roll back the backstack * to its position. * <p> * We never push the Dashboard fragment to the backstack because it is always * the first fragment displayed (if we push it to the backstack too, pressing the back button * while Dashboard fragment is displayed causes a blank activity screen). * * @param item The menu item selected. * @return See {@link NavigationView.OnNavigationItemSelectedListener} */ @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); // Ignore requests for the same fragment already displayed if (!mMenuItems2Fragments.get(id).isInstance(fragment)) { FragmentManager fm = getSupportFragmentManager(); boolean add = true; if (id == R.id.menuDashboard) { // Dashboard is the main fragment, should never be removed, // so remove all backstack entries first to reach the first Dashboard. popAllBackStack(); // Never add Dashboard to the backstack add = false; fragment = new Dashboard(); // ATTENTION: menuDashboard does not check initially, so we need to manage it ourselves item.setChecked(true); } else { // TODO: Check why android:checkableBehavior="single" does not uncheck menuDashboard MenuItem itemDashboard = navigationView.getMenu().findItem(R.id.menuDashboard); if (itemDashboard.isChecked()) { itemDashboard.setChecked(false); } try { fragment = (Fragment) mMenuItems2Fragments.get(id).getConstructor().newInstance(); } catch (Exception e) { e.printStackTrace(); logger.severe("EXCEPTION: " + e.toString()); return false; } } String fragmentName = fragment.getClass().getSimpleName(); // Rolls back the backstack if the fragment is already in if (!fm.popBackStackImmediate(fragmentName, 0)) { android.support.v4.app.FragmentTransaction transaction = fm.beginTransaction(); transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); if (add) { transaction.addToBackStack(fragmentName); } // TODO: Check if we need to pass any args //fragment.setArguments(getIntent().getExtras()); transaction.replace(R.id.fragmentContainer, fragment); transaction.commit(); } } else { logger.finest("onNavigationItemSelected will not show the same fragment"); } drawer.closeDrawer(GravityCompat.START); createOptionsMenu(); return true; }