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 <T> Fragment findFragment(Class<T> 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<Fragment> 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<Fragment> 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();
|
}
|
|
}
|
}
|