wjc
2025-04-30 ce9298417731c02a1b41b83049f637abc356fc02
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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();
        }
 
    }
}