ModulesFragmentMgr.java
4.7 KB
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package com.polysoft.nafmii.fragment.home;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import com.polysoft.nafmii.bean.MenuBean;
import com.polysoft.nafmii.enums.ModulesEnum;
import com.polysoft.nafmii.fragment.HomeWebviewFragment;
import com.polysoft.nafmii.fragment.WebViewFragment;
import com.polysoft.nafmii.webview.IWebview;
import java.util.List;
public class ModulesFragmentMgr implements FragmentManager.OnBackStackChangedListener {
private final FragmentManager manager;
private final int containerId;
private final ModuleUrlHandle moduleHandle;
private ModulesEnum currentModule;
private OnChangeModuleListener changeListener;
public ModulesFragmentMgr(FragmentActivity activity, int containerId) {
this.manager = activity.getSupportFragmentManager();
this.containerId = containerId;
this.moduleHandle = new ModuleUrlHandle(activity);
this.manager.addOnBackStackChangedListener(this);
}
public void addChangeModuleLsitener(OnChangeModuleListener listener) {
this.changeListener = listener;
}
public void showInitFragment(ModulesEnum[] modules) {
for (ModulesEnum module : modules) {
this.findNewModuleFragment(module);
}
this.showModule(modules[0]);
}
public WebViewFragment getCurrentFragment() {
if (null == this.currentModule) return null;
return this.findFragment(this.currentModule);
}
public boolean onBackStack() {
WebViewFragment fragment = this.getCurrentFragment();
if (null == fragment) {
return false;
}
IWebview webview = fragment.getWebview();
if (null != webview && webview.canGoBack()) {
return false;
}
if (this.manager.getBackStackEntryCount() > 0) {
this.manager.popBackStack();
return false;
}
return true;
}
@Override
public void onBackStackChanged() {
List<Fragment> fragments = this.manager.getFragments();
for (int i = 0; i < fragments.size(); i++) {
Fragment fragment = fragments.get(i);
if (fragment.isVisible()) {
this.setCurrentModule(ModulesEnum.findModule(fragment.getTag()));
return;
}
}
}
public void showModule(ModulesEnum module) {
if (module == this.currentModule) {
return;
}
if (null == this.currentModule) {
this.showModuleFragment(this.findFragment(module));
this.setCurrentModule(module);
return;
}
this.showModule(this.moduleHandle.getModuleHandle(module));
}
public void showModule(MenuBean bean) {
this.showModule(moduleHandle.getModuleHandle(bean));
}
public WebViewFragment findFragment(ModulesEnum module) {
return (WebViewFragment) this.manager.findFragmentByTag(module.fmtKey);
}
private void showModule(ModuleUrlHandle.IModuleHandle handle) {
ModulesEnum module = handle.getModule();
WebViewFragment fragment = this.findNewModuleFragment(module);
if (!module.fmtKey.equals(this.currentModule.fmtKey)) {
this.showModuleFragment(fragment);
} else {
handle.loadUrl(fragment.getWebview());
}
this.setCurrentModule(module);
}
private WebViewFragment findNewModuleFragment(ModulesEnum module) {
WebViewFragment fragment = this.findFragment(module);
if (null == fragment) {
FragmentTransaction transaction = this.manager.beginTransaction();
fragment = HomeWebviewFragment.newInstance(this.moduleHandle.getModuleUrl(module));
transaction.add(this.containerId, fragment, module.fmtKey).hide(fragment).commitNow();
}
return fragment;
}
private void showModuleFragment(Fragment fragment) {
if (null == fragment) return;
FragmentTransaction transaction = this.manager.beginTransaction();
WebViewFragment currentFragment = this.getCurrentFragment();
if (null != currentFragment) {
transaction.hide(currentFragment).addToBackStack("");
}
transaction.show(fragment).commit();
}
private void setCurrentModule(ModulesEnum module) {
this.currentModule = module;
if (null != this.changeListener) {
WebViewFragment fragment = this.getCurrentFragment();
this.changeListener.changeModule(module, fragment);
}
}
public interface OnChangeModuleListener {
void changeModule(ModulesEnum module, Fragment fragment);
}
}