Bladeren bron

Feed back for empty stack, experimental fix for react state cleared when view pushed down the stack.

Yedidya Kennard 9 jaren geleden
bovenliggende
commit
04efb4d103

+ 6
- 2
android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java Bestand weergeven

205
 
205
 
206
     public abstract String getActiveNavigatorID();
206
     public abstract String getActiveNavigatorID();
207
 
207
 
208
+    public abstract int getScreenStackSize();
209
+
208
     @Override
210
     @Override
209
     public boolean onCreateOptionsMenu(Menu menu) {
211
     public boolean onCreateOptionsMenu(Menu menu) {
210
         mMenu = menu;
212
         mMenu = menu;
253
 
255
 
254
     @Override
256
     @Override
255
     public void onBackPressed() {
257
     public void onBackPressed() {
256
-
257
-        if(pop(getActiveNavigatorID()) == null) {
258
+        if(getScreenStackSize() > 1){
259
+            pop(getActiveNavigatorID());
260
+        }
261
+        else{
258
             if (mReactInstanceManager != null)
262
             if (mReactInstanceManager != null)
259
                 mReactInstanceManager.onBackPressed();
263
                 mReactInstanceManager.onBackPressed();
260
             else
264
             else

+ 6
- 0
android/app/src/main/java/com/reactnativenavigation/activities/RootActivity.java Bestand weergeven

71
         return null;
71
         return null;
72
         //TODO
72
         //TODO
73
     }
73
     }
74
+
75
+    @Override
76
+    public int getScreenStackSize() {
77
+        return 0;
78
+        //TODO
79
+    }
74
 }
80
 }

+ 5
- 0
android/app/src/main/java/com/reactnativenavigation/activities/SingleScreenActivity.java Bestand weergeven

55
     public String getActiveNavigatorID() {
55
     public String getActiveNavigatorID() {
56
         return navID;
56
         return navID;
57
     }
57
     }
58
+
59
+    @Override
60
+    public int getScreenStackSize() {
61
+        return screenStack.getStackSize();
62
+    }
58
 }
63
 }

+ 5
- 0
android/app/src/main/java/com/reactnativenavigation/activities/TabActivity.java Bestand weergeven

74
     public String getActiveNavigatorID() {
74
     public String getActiveNavigatorID() {
75
         return adapter.getNavID(mViewPager.getCurrentItem());
75
         return adapter.getNavID(mViewPager.getCurrentItem());
76
     }
76
     }
77
+
78
+    @Override
79
+    public int getScreenStackSize() {
80
+        return adapter.getStackSizeForNavigatorId(getActiveNavigatorID());
81
+    }
77
 }
82
 }

+ 4
- 0
android/app/src/main/java/com/reactnativenavigation/adapters/ViewPagerAdapter.java Bestand weergeven

122
     public String getNavID(int position) {
122
     public String getNavID(int position) {
123
         return navIDs.get(position);
123
         return navIDs.get(position);
124
     }
124
     }
125
+
126
+    public int getStackSizeForNavigatorId(String activeNavigatorID) {
127
+        return stacksByNavId.get(activeNavigatorID).getStackSize();
128
+    }
125
 }
129
 }

+ 7
- 3
android/app/src/main/java/com/reactnativenavigation/views/ScreenStack.java Bestand weergeven

43
         RctView view = new RctView(reactActivity, mReactInstanceManager, screen);
43
         RctView view = new RctView(reactActivity, mReactInstanceManager, screen);
44
         addView(view, MATCH_PARENT, MATCH_PARENT);
44
         addView(view, MATCH_PARENT, MATCH_PARENT);
45
         if(oldView!=null) {
45
         if(oldView!=null) {
46
-            removeView(oldView);
46
+            oldView.setVisibility(GONE);
47
         }
47
         }
48
         stack.push(new ScreenView(screen, view));
48
         stack.push(new ScreenView(screen, view));
49
     }
49
     }
50
 
50
 
51
     public Screen pop(){
51
     public Screen pop(){
52
-        //TODO maybe return null if size is 1?
53
         if(stack.isEmpty()) {
52
         if(stack.isEmpty()) {
54
             return null;
53
             return null;
55
         }
54
         }
56
         ScreenView popped = stack.pop();
55
         ScreenView popped = stack.pop();
57
         if(!stack.isEmpty()) {
56
         if(!stack.isEmpty()) {
58
-            addView(stack.peek().view, 0);
57
+            View view = stack.peek().view;
58
+            if(view.getParent() == null)
59
+                addView(stack.peek().view, 0);
60
+            else {
61
+                view.setVisibility(VISIBLE);
62
+            }
59
         }
63
         }
60
         removeView(popped.view);
64
         removeView(popped.view);
61
         return popped.screen;
65
         return popped.screen;