private void hideVisibleFragment(FragmentTransaction fragmentTransaction) { final Fragment visibleFragment = getVisibleFragment(); if (visibleFragment != null) { showHideHandler.hide(fragmentTransaction, visibleFragment); } }
@Override public void onFlatSelected() { tabController.switchTo(Tabs.TAB_3); } }
/** * Create a new instance of {@link TabController} with the default {@link ShowHideHandler}. * * @param fragmentManager The support fragment manager, used to switch between fragments. * @param containerId The view id of the container for your fragments. * * @see ShowHideHandler */ public TabController(FragmentManager fragmentManager, int containerId) { this(fragmentManager, containerId, new ShowHideFrHandler()); }
private void hide(FragmentProvider currentFragment) { final Fragment visibleFragment = fragmentManager.findFragmentByTag(currentFragment.getTag()); if (visibleFragment != null) { inTransaction(transaction -> { showHideHandler.hide(transaction, visibleFragment); return new ArrayList<>(); }); } }
@Override public void onFragmentAlreadyVisible(FragmentProvider provider, Fragment visibleFragment) { Log.d(TAG, "onFragmentAlreadyVisible: " + provider.getTag()); }
private Fragment addToFragmentManager(FragmentProvider fragmentType, FragmentTransaction transaction) { Fragment fragment = fragmentType.getInstance(); transaction.add(containerId, fragment, fragmentType.getTag()); return fragment; }
private void inTransaction(@NonNull TransactionBody body, @NonNull TransactionCommitter committer) { FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.setAllowOptimization(false); List<Notifier> notifiers = body.runInTransaction(transaction); committer.commitTransaction(transaction); if (changeListener != null) for (Notifier notifier : notifiers) { notifier.notifyListener(changeListener); } }
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); tabController.save(outState); }
/** * Iterates through the fragments, returned by FragmentManager::getFragments. * * @return The first visible fragment found in the list or null. */ @Nullable public Fragment getVisibleFragment() { final List<Fragment> fragments = getFMFragments(); for (Fragment fragment : fragments) { if (showHideHandler.isVisible(fragment)) { return fragment; } } return null; }
/** * Save the state of the {@link TabController} in order to be able to restore your last visible * fragment when your app restores. * <br> * Make sure you call {@link #restore(Bundle)} when restoring your instance state. * @param savedInstanceState The output Bundle where the state will be saved to. */ public void save(Bundle savedInstanceState) { final Bundle controllerState = new Bundle(); final List<Fragment> fragments = getFMFragments(); for (Fragment fragment : fragments) { showHideHandler.save(controllerState, fragment); } savedInstanceState.putBundle(BUNDLE_KEY, controllerState); }
private void showFragment(Fragment fragment, FragmentTransaction transaction) { showHideHandler.show(transaction, fragment); }
@Override public void onFragmentAlreadyVisible(FragmentProvider fragmentType, Fragment visibleFragment) { Log.d(TAG, "onFragmentAlreadyVisible: " + fragmentType.getTag()); }
@Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); tabController.save(outState); }
@Override public void onFlatSelected() { tabController.switchTo(Tabs.TAB_3); } }
@Override public void onFragmentCreated(FragmentProvider provider, Fragment createdFragment) { Log.d(TAG, "onFragmentCreated: " + provider.getTag()); }
@Override public void onViewPagerSelected() { tabController.switchTo(Tabs.TAB_2); }
@Override public void onFragmentShown(FragmentProvider provider, Fragment shownFragment) { Log.d(TAG, "onFragmentShown: " + provider.getTag()); }
@Override public void onStackSelected() { tabController.switchTo(Tabs.TAB_1); }
@Override public void onStackSelected() { tabController.switchTo(Tabs.TAB_1); }
@Override public void onViewPagerSelected() { tabController.switchTo(Tabs.TAB_2); }