瀏覽代碼

Check if previous screen is already attached to window when swaping screen

Guy Carmeli 9 年之前
父節點
當前提交
01ba0cbcad
共有 1 個文件被更改,包括 12 次插入1 次删除
  1. 12
    1
      android/app/src/main/java/com/reactnativenavigation/screens/ScreenStack.java

+ 12
- 1
android/app/src/main/java/com/reactnativenavigation/screens/ScreenStack.java 查看文件

2
 
2
 
3
 import android.support.annotation.Nullable;
3
 import android.support.annotation.Nullable;
4
 import android.support.v7.app.AppCompatActivity;
4
 import android.support.v7.app.AppCompatActivity;
5
+import android.util.Log;
5
 import android.view.View;
6
 import android.view.View;
6
 import android.widget.RelativeLayout;
7
 import android.widget.RelativeLayout;
7
 
8
 
18
 import java.util.Stack;
19
 import java.util.Stack;
19
 
20
 
20
 public class ScreenStack {
21
 public class ScreenStack {
22
+    private static final String TAG = "ScreenStack";
21
 
23
 
22
     public interface OnScreenPop {
24
     public interface OnScreenPop {
23
         void onScreenPopAnimationEnd();
25
         void onScreenPopAnimationEnd();
165
     }
167
     }
166
 
168
 
167
     public boolean canPop() {
169
     public boolean canPop() {
168
-        return getStackSize() > 1;
170
+        return getStackSize() > 1 && !isPreviousScreenAttachedToWindow();
171
+    }
172
+
173
+    private boolean isPreviousScreenAttachedToWindow() {
174
+        Screen previousScreen = stack.get(stack.size() - 2);
175
+        if (previousScreen.getParent() != null) {
176
+            Log.w(TAG, "Can't pop stack. reason: previous screen is already attached");
177
+            return true;
178
+        }
179
+        return false;
169
     }
180
     }
170
 
181
 
171
     public void setScreenTopBarVisible(String screenInstanceId, final boolean visible, final boolean animate) {
182
     public void setScreenTopBarVisible(String screenInstanceId, final boolean visible, final boolean animate) {