Go back two fragments at a time

0

I have an activity with two FrameLayouts, each with a fragment. But when doing a backpress first the fragment returns to its previous state, and after another backpress the fragment returns to its previous state.

I want to make backpress the two FragmentA and FragmentB back to their previous state at the same time.

Here the code:

    mFragmentService.replaceAndAddToBackStack(FragmentA.newInstance(), R.id.container_top);
    mFragmentService.replaceAndAddToBackStack(FragmentB.newInstance(), R.id.container_bot);


    public void replaceAndAddToBackStack(Fragment fragment, @IdRes int idRes) {
           mFragmentManager
                    .beginTransaction()
                    .replace(idRes, fragment)
                    .addToBackStack(fragment.getClass().getName())
                    .commit();
}

Any ideas?

    
asked by Pablo Cegarra 25.10.2017 в 19:50
source

1 answer

1

Browsing through the backstage in the activity:

/**
 * Recursivamente navega a través de los fragmentos anidados para una entrada al backstack.
 *
 * @return <code>true</code> si se realizó un pop
 * @see <a href="https://stackoverflow.com/a/39524096">Recursive PopBackStack</a>
 */
public static boolean recursivePopBackStack(FragmentManager fragmentManager) {
    if (fragmentManager.getFragments() != null) {
        for (Fragment fragment : fragmentManager.getFragments()) {
            if (fragment != null && fragment.isVisible()) {
                boolean popped = recursivePopBackStack(fragment.getChildFragmentManager());
                if (popped) {
                    return true;
                }
            }
        }
    }
    if (fragmentManager.getBackStackEntryCount() > 0) {
        fragmentManager.popBackStack();
        return true;
    }
    return false;
}

@Override
public void onBackPressed() {
    if (recursivePopBackStack(mFragmentManager)) {
        return;
    }
    super.onBackPressed();
}

And to go back it would be something like doing this twice from the activity or from the fragment:

mFragmentManager.popBackStack();

    
answered by 27.10.2017 / 04:39
source