浏览代码

Fix tabs and right buttons getting parsed in wrong order

Guy Carmeli 8 年前
父节点
当前提交
39e8334fd9

+ 1
- 1
android/app/src/main/java/com/reactnativenavigation/params/parsers/ActivityParamsParser.java 查看文件

18
 
18
 
19
         if (hasKey(params, "tabs")) {
19
         if (hasKey(params, "tabs")) {
20
             result.type = ActivityParams.Type.TabBased;
20
             result.type = ActivityParams.Type.TabBased;
21
-            result.tabParams = ScreenParamsParser.parseTabs(params.getBundle("tabs"));
21
+            result.tabParams = new ScreenParamsParser().parseTabs(params.getBundle("tabs"));
22
         }
22
         }
23
 
23
 
24
         if (hasKey(params, "sideMenu")) {
24
         if (hasKey(params, "sideMenu")) {

+ 16
- 1
android/app/src/main/java/com/reactnativenavigation/params/parsers/Parser.java 查看文件

2
 
2
 
3
 import android.os.Bundle;
3
 import android.os.Bundle;
4
 
4
 
5
-public class Parser {
5
+import java.util.ArrayList;
6
+import java.util.Collections;
7
+import java.util.List;
6
 
8
 
9
+public class Parser {
7
     protected static boolean hasKey(Bundle bundle, String key) {
10
     protected static boolean hasKey(Bundle bundle, String key) {
8
         return bundle.keySet().contains(key);
11
         return bundle.keySet().contains(key);
9
     }
12
     }
20
             super(key);
23
             super(key);
21
         }
24
         }
22
     }
25
     }
26
+
27
+    protected interface ParseStrategy<T> {
28
+        T parse(Bundle params);
29
+    }
30
+
31
+    protected <T> List<T> parseBundle(Bundle params, ParseStrategy<T> strategy) {
32
+        ArrayList<T> result = new ArrayList<>(Collections.nCopies(params.keySet().size(), (T) null));
33
+        for (String key : params.keySet()) {
34
+            result.set(Integer.parseInt(key), strategy.parse(params.getBundle(key)));
35
+        }
36
+        return result;
37
+    }
23
 }
38
 }

+ 8
- 9
android/app/src/main/java/com/reactnativenavigation/params/parsers/ScreenParamsParser.java 查看文件

10
 import com.reactnativenavigation.params.TopTabParams;
10
 import com.reactnativenavigation.params.TopTabParams;
11
 import com.reactnativenavigation.react.ImageLoader;
11
 import com.reactnativenavigation.react.ImageLoader;
12
 
12
 
13
-import java.util.ArrayList;
14
-import java.util.Arrays;
15
 import java.util.List;
13
 import java.util.List;
16
 
14
 
17
 public class ScreenParamsParser extends Parser {
15
 public class ScreenParamsParser extends Parser {
75
     private static List<TopTabParams> parseTopTabs(Bundle params) {
73
     private static List<TopTabParams> parseTopTabs(Bundle params) {
76
         List<TopTabParams> topTabParams = null;
74
         List<TopTabParams> topTabParams = null;
77
         if (hasKey(params, TOP_TABS)) {
75
         if (hasKey(params, TOP_TABS)) {
78
-             topTabParams = TopTabParamsParser.parse(params.getBundle(TOP_TABS));
76
+            topTabParams = new TopTabParamsParser().parse(params.getBundle(TOP_TABS));
79
         }
77
         }
80
         return topTabParams;
78
         return topTabParams;
81
     }
79
     }
101
         return leftButton;
99
         return leftButton;
102
     }
100
     }
103
 
101
 
104
-    public static List<ScreenParams> parseTabs(Bundle params) {
105
-        ScreenParams result[] = new ScreenParams[params.keySet().size()];
106
-        for (String key : params.keySet()) {
107
-            result[Integer.parseInt(key)] = ScreenParamsParser.parse(params.getBundle(key));
108
-        }
109
-        return new ArrayList<>(Arrays.asList(result));
102
+    public List<ScreenParams> parseTabs(Bundle params) {
103
+        return parseBundle(params, new ParseStrategy<ScreenParams>() {
104
+            @Override
105
+            public ScreenParams parse(Bundle screen) {
106
+                return ScreenParamsParser.parse(screen);
107
+            }
108
+        });
110
     }
109
     }
111
 }
110
 }

+ 6
- 7
android/app/src/main/java/com/reactnativenavigation/params/parsers/TitleBarButtonParamsParser.java 查看文件

7
 import com.reactnativenavigation.params.TitleBarButtonParams;
7
 import com.reactnativenavigation.params.TitleBarButtonParams;
8
 import com.reactnativenavigation.react.ImageLoader;
8
 import com.reactnativenavigation.react.ImageLoader;
9
 
9
 
10
-import java.util.ArrayList;
11
 import java.util.List;
10
 import java.util.List;
12
 
11
 
13
 public class TitleBarButtonParamsParser extends Parser {
12
 public class TitleBarButtonParamsParser extends Parser {
14
     public List<TitleBarButtonParams> parseButtons(Bundle params) {
13
     public List<TitleBarButtonParams> parseButtons(Bundle params) {
15
-        List<TitleBarButtonParams> result = new ArrayList<>();
16
-
17
-        for (String key : params.keySet()) {
18
-            result.add(parseSingleButton(params.getBundle(key)));
19
-        }
20
-        return result;
14
+        return parseBundle(params, new ParseStrategy<TitleBarButtonParams>() {
15
+            @Override
16
+            public TitleBarButtonParams parse(Bundle button) {
17
+                return parseSingleButton(button);
18
+            }
19
+        });
21
     }
20
     }
22
 
21
 
23
     public TitleBarButtonParams parseSingleButton(Bundle bundle) {
22
     public TitleBarButtonParams parseSingleButton(Bundle bundle) {

+ 7
- 7
android/app/src/main/java/com/reactnativenavigation/params/parsers/TopTabParamsParser.java 查看文件

6
 import com.reactnativenavigation.params.NavigationParams;
6
 import com.reactnativenavigation.params.NavigationParams;
7
 import com.reactnativenavigation.params.TopTabParams;
7
 import com.reactnativenavigation.params.TopTabParams;
8
 
8
 
9
-import java.util.ArrayList;
10
 import java.util.List;
9
 import java.util.List;
11
 
10
 
12
 public class TopTabParamsParser extends Parser {
11
 public class TopTabParamsParser extends Parser {
15
     private static final String NAVIGATION_PARAMS = "navigationParams";
14
     private static final String NAVIGATION_PARAMS = "navigationParams";
16
 
15
 
17
     @SuppressWarnings("ConstantConditions")
16
     @SuppressWarnings("ConstantConditions")
18
-    public static List<TopTabParams> parse(Bundle params) {
19
-        List<TopTabParams> result = new ArrayList<>();
20
-        for (String key : params.keySet()) {
21
-            result.add(parseItem(params.getBundle(key)));
22
-        }
23
-        return result;
17
+    public List<TopTabParams> parse(Bundle params) {
18
+        return parseBundle(params, new ParseStrategy<TopTabParams>() {
19
+            @Override
20
+            public TopTabParams parse(Bundle topTabs) {
21
+                return parseItem(topTabs);
22
+            }
23
+        });
24
     }
24
     }
25
 
25
 
26
     @NonNull
26
     @NonNull