package com.hdl.photovoltaic.utils; import android.text.TextUtils; import java.util.List; import androidx.annotation.IdRes; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.Lifecycle; /** * Created by Tong on 2021/9/30. */ public class FragmentUtils { public static Fragment findFragment(Class fragmentClass, FragmentManager manager) { if (fragmentClass == null || manager == null) return null; for (Fragment fragment : manager.getFragments()) { if (fragment.getClass() == fragmentClass) { return fragment; } } return null; } public static Fragment findFragment(String tag, FragmentManager manager) { if (manager == null || TextUtils.isEmpty(tag)) return null; for (Fragment fragment : manager.getFragments()) { if (tag.equals(fragment.getTag())) { return fragment; } } return null; } public static void loadMultipleFragment(@IdRes int layoutId, FragmentManager manager, Fragment... fragments) { loadMultipleFragment(layoutId, 0, manager, fragments); } public static void loadMultipleFragment(@IdRes int layoutId, int showPosition, FragmentManager manager, Fragment... fragments) { if (manager == null || fragments.length == 0) return; removeAllFragments(manager); FragmentTransaction beginTransaction = manager.beginTransaction(); for (int i = 0; i < fragments.length; i++) { Fragment fragment = fragments[i]; if (fragment != null) { if (!fragment.isAdded()) { beginTransaction.add(layoutId, fragment); } if (i == showPosition) { beginTransaction.setMaxLifecycle(fragment, Lifecycle.State.RESUMED) .show(fragment); } else { beginTransaction.setMaxLifecycle(fragment, Lifecycle.State.CREATED) .hide(fragment); } } } beginTransaction.commitAllowingStateLoss(); } public static void showHideFragment(FragmentManager manager, Fragment showFragment) { if (manager == null) return; final List fragments = manager.getFragments(); final FragmentTransaction beginTransaction = manager.beginTransaction(); for (Fragment fragment : fragments) { if (fragment != showFragment) { beginTransaction .setMaxLifecycle(fragment, Lifecycle.State.STARTED) .hide(fragment); } } beginTransaction .setMaxLifecycle(showFragment, Lifecycle.State.RESUMED) .show(showFragment).commitAllowingStateLoss(); } public static void removeAllFragments(FragmentManager manager) { if (manager == null) return; try { FragmentTransaction transaction = manager.beginTransaction(); final List fragments = manager.getFragments(); for (int i = 0; i < fragments.size(); i++) { Fragment fragment = fragments.get(i); if (fragment != null) { // FragmentManager childManager = fragment.getChildFragmentManager(); // removeAllFragments(childManager); transaction.remove(fragment); } } transaction.commitAllowingStateLoss(); } catch (Exception e) { e.printStackTrace(); } } }