Explorar o código

增加堆栈管理功能

songw hai 1 ano
pai
achega
51aa9bb3a2

+ 41 - 0
app/src/main/java/com/uas/uas_mes_stw/util/FragmentStackManager.java

@@ -0,0 +1,41 @@
+package com.uas.uas_mes_stw.util;
+
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentTransaction;
+
+import com.uas.uas_mes_stw.fragment.BaseFragment;
+
+public class FragmentStackManager {
+
+    private FragmentManager fragmentManager;
+    private int containerId;
+
+    public FragmentStackManager(FragmentManager fragmentManager, int containerId) {
+        this.fragmentManager = fragmentManager;
+        this.containerId = containerId;
+        //Fragment 回退栈的监听
+        fragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
+            @Override
+            public void onBackStackChanged() {
+                MyLog.e("触发了回退栈");
+            }
+        });
+    }
+
+    public void pushFragment(BaseFragment fragment) {
+        FragmentTransaction transaction = fragmentManager.beginTransaction();
+        transaction.replace(containerId, fragment);
+        transaction.addToBackStack(null); // 添加到back stack以管理Fragment切换
+        transaction.commit();
+    }
+
+    public void popFragment() {
+        fragmentManager.popBackStack();
+    }
+
+    public void popAllFragments() {
+        fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
+    }
+    
+    
+}

+ 12 - 13
app/src/main/java/com/uas/uas_mes_stw/util/FragmentUtils.java

@@ -46,19 +46,6 @@ public class FragmentUtils {
     }
 
 
-    public static void switchFragmentOnlyAdd(Fragment from, Fragment to) {
-        FragmentManager fragmentManager = from.getFragmentManager();
-        FragmentTransaction transaction = fragmentManager.beginTransaction();
-        if (!to.isAdded()) { // 先判断是否被add过
-            transaction.hide(from)
-                    .add(R.id.container_function_fragment, to)
-//                    .addToBackStack(null)   //可能会出现空白页
-                    .commit(); // 隐藏当前的fragment,add下一个到Activity中
-        } else {
-            transaction.hide(from).show(to).commit(); // 隐藏当前的fragment,显示下一个
-        }
-    }
-
     //跳转后,旧的弹出栈
     public static void switchFragmentDelete(Fragment from, Fragment to) {
         FragmentManager fragmentManager = from.getFragmentManager();
@@ -72,4 +59,16 @@ public class FragmentUtils {
 
         transaction.commit();
     }
+
+    //弹出栈
+    public void popFragment(Fragment from) {
+        FragmentManager fragmentManager = from.getFragmentManager();
+        fragmentManager.popBackStack();
+    }
+
+    //全部fragment弹出栈
+    public void popAllFragments(Fragment from) {
+        FragmentManager fragmentManager = from.getFragmentManager();
+        fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
+    }
 }