图解
代码
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