@Override public void onBackPressed() { if (!fragmentStack.pop()) super.onBackPressed(); }
/** * 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(); }
@UiThreadTest public void testPushPop() throws Exception { FragmentManager manager = activity.getSupportFragmentManager(); FragmentStack stack = new FragmentStack(activity, manager, CONTAINER_ID); TestFragment1 fragment = new TestFragment1(); stack.push(fragment); assertTopFragment(manager, stack, fragment, 0); TestFragment2 fragment2 = new TestFragment2(); stack.push(fragment2); assertFragment(manager, fragment, 0); assertTopFragment(manager, stack, fragment2, 1); assertFalse(fragment.isAdded()); assertTrue(fragment2.isAdded()); assertTrue(stack.pop()); assertTopFragment(manager, stack, fragment, 0); assertNull(manager.findFragmentByTag("1")); assertFalse(stack.pop()); assertTopFragment(manager, stack, fragment, 0); }