图解

在这里插入图片描述

代码

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;


public class FragmentHelper {
    static public void clearFragmentStack(FragmentActivity activity) {
        FragmentManager fm = activity.getSupportFragmentManager();
        for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
            fm.popBackStack();
        }
    }

    static public void clearFragmentStack(FragmentActivity activity, String name) {
        FragmentManager fm = activity.getSupportFragmentManager();
        fm.popBackStack(name, FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }

    static public void startFragmentInStack(FragmentActivity activity, int id, Fragment fragment, String name) {
        FragmentTransaction fragmentTransaction = activity.getSupportFragmentManager().beginTransaction();
        fragmentTransaction.addToBackStack(name);
        fragmentTransaction.replace(id, fragment).commit();
    }

    static public void startFragment(FragmentActivity activity, int id, Fragment fragment) {
        FragmentTransaction fragmentTransaction = activity.getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(id, fragment).commit();
    }

    static public void restartFragmentInStack(FragmentActivity activity, int id, Fragment fragment, String name) {
        clearFragmentStack(activity, name);
        startFragmentInStack(activity, id, fragment, name);
    }

    static public void restartFragment(FragmentActivity activity, int id, Fragment fragment) {
        clearFragmentStack(activity);
        startFragment(activity, id, fragment);
    }

    static public void restartFragmentInStack(FragmentActivity activity, int id, Fragment fragment) {
        clearFragmentStack(activity);
        startFragmentInStack(activity, id, fragment, null);
    }

    static public void startFragmentInStack(FragmentActivity activity, int id, Fragment fragment) {
        startFragmentInStack(activity, id, fragment, null);
    }


}

总结

如果fragment需要跳转,则第一次replace需要addToBackStack
如果不需要跳转,则replace之前,最好清空FragmentStack栈中的所有Fragment再replace

更多推荐