Browse Source

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

Guy Carmeli 8 years ago
parent
commit
01ba0cbcad

+ 12
- 1
android/app/src/main/java/com/reactnativenavigation/screens/ScreenStack.java View File

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) {