Kaynağa Gözat

Change bottom tab visibility when switching tabs instead of removing and readding tabs

Guy Carmeli 8 yıl önce
ebeveyn
işleme
ed0082ad89

+ 23
- 17
android/app/src/main/java/com/reactnativenavigation/layouts/BottomTabsLayout.java Dosyayı Görüntüle

@@ -36,7 +36,21 @@ public class BottomTabsLayout extends RelativeLayout implements Layout, AHBottom
36 36
     private void createLayout() {
37 37
         createBottomTabs();
38 38
         addBottomTabsToScreen();
39
-        addInitialScreen();
39
+        addScreenStacks();
40
+        showInitialScreenStack();
41
+    }
42
+
43
+    private void addScreenStacks() {
44
+        for (int i = 0; i < screenStacks.length; i++) {
45
+            createAndAddScreenStack(i);
46
+        }
47
+    }
48
+
49
+    private void createAndAddScreenStack(int position) {
50
+        ScreenStack newStack = new ScreenStack(activity, params.tabParams.get(position));
51
+        screenStacks[position] = newStack;
52
+        newStack.setVisibility(GONE);
53
+        addView(newStack, 0, new LayoutParams(MATCH_PARENT, MATCH_PARENT));
40 54
     }
41 55
 
42 56
     private void createBottomTabs() {
@@ -51,8 +65,8 @@ public class BottomTabsLayout extends RelativeLayout implements Layout, AHBottom
51 65
         addView(bottomTabs, lp);
52 66
     }
53 67
 
54
-    private void addInitialScreen() {
55
-        createAndAddScreenStack(0);
68
+    private void showInitialScreenStack() {
69
+        showStack(screenStacks[0]);
56 70
     }
57 71
 
58 72
     private void setBottomTabsStyle() {
@@ -143,28 +157,20 @@ public class BottomTabsLayout extends RelativeLayout implements Layout, AHBottom
143 157
 
144 158
     @Override
145 159
     public void onTabSelected(int position, boolean wasSelected) {
146
-        removeCurrentStack();
160
+        hideCurrentStack();
147 161
 
148 162
         ScreenStack newStack = screenStacks[position];
149
-        if (newStack == null) {
150
-            createAndAddScreenStack(position);
151
-        } else {
152
-            addView(newStack, 0, new LayoutParams(MATCH_PARENT, MATCH_PARENT));
153
-            newStack.preventMountAfterReatachedToWindow();
154
-        }
163
+        showStack(newStack);
155 164
         currentStackIndex = position;
156 165
     }
157 166
 
158
-    private void createAndAddScreenStack(int position) {
159
-        ScreenStack newStack = new ScreenStack(activity, params.tabParams.get(position));
160
-        screenStacks[position] = newStack;
161
-        addView(newStack, 0, new LayoutParams(MATCH_PARENT, MATCH_PARENT));
167
+    private void showStack(ScreenStack newStack) {
168
+        newStack.setVisibility(VISIBLE);
162 169
     }
163 170
 
164
-    private void removeCurrentStack() {
171
+    private void hideCurrentStack() {
165 172
         ScreenStack currentScreenStack = getCurrentScreenStack();
166
-        currentScreenStack.preventUnmountOnDetachedFromWindow();
167
-        removeView(currentScreenStack);
173
+        currentScreenStack.setVisibility(GONE);
168 174
     }
169 175
 
170 176
     private ScreenStack getCurrentScreenStack() {