/** * Pops the top item if the stack. * If the fragment implements {@link OnBackPressedHandlingFragment}, calls {@link OnBackPressedHandlingFragment#onBackPressed()} instead. * If {@link OnBackPressedHandlingFragment#onBackPressed()} returns false the fragment gets popped. * * @return true if a fragment has been popped or if {@link OnBackPressedHandlingFragment#onBackPressed()} returned true; */ public boolean back() { Fragment top = peek(); if (top instanceof OnBackPressedHandlingFragment) { if (((OnBackPressedHandlingFragment)top).onBackPressed()) return true; } return pop(); }
/** * Pushes a fragment to the top of the stack. */ public void push(Fragment fragment) { Fragment top = peek(); if (top != null) { manager.beginTransaction() .setCustomAnimations(R.anim.enter_from_right, R.anim.exit_to_left, R.anim.enter_from_left, R.anim.exit_to_right) .remove(top) .add(containerId, fragment, indexToTag(manager.getBackStackEntryCount() + 1)) .addToBackStack(null) .commit(); } else { manager.beginTransaction() .add(containerId, fragment, indexToTag(0)) .commit(); } manager.executePendingTransactions(); }
private void assertTopFragment(FragmentManager manager, FragmentStack stack, Fragment fragment, int index) { assertFragment(manager, fragment, index); assertEquals(fragment, manager.findFragmentById(CONTAINER_ID)); assertEquals(fragment, stack.peek()); assertEquals(index, manager.getBackStackEntryCount()); }