소스 검색

Add a navigator instance to SideMenu

Guy Carmeli 8 년 전
부모
커밋
41d43d8b6c

+ 9
- 5
android/app/src/main/java/com/reactnativenavigation/layouts/SingleScreenLayout.java 파일 보기

24
     private final SideMenuParams sideMenuParams;
24
     private final SideMenuParams sideMenuParams;
25
     private ScreenStack stack;
25
     private ScreenStack stack;
26
     private TitleBarBackButtonListener titleBarBackButtonListener;
26
     private TitleBarBackButtonListener titleBarBackButtonListener;
27
-    private SideMenu sideMenu;
27
+    private @Nullable SideMenu sideMenu;
28
 
28
 
29
     public SingleScreenLayout(AppCompatActivity activity, ScreenParams screenParams,
29
     public SingleScreenLayout(AppCompatActivity activity, ScreenParams screenParams,
30
                               TitleBarBackButtonListener titleBarBackButtonListener) {
30
                               TitleBarBackButtonListener titleBarBackButtonListener) {
44
         if (sideMenuParams == null) {
44
         if (sideMenuParams == null) {
45
             createStack(this);
45
             createStack(this);
46
         } else {
46
         } else {
47
-            createSideMenu();
47
+            sideMenu = createSideMenu();
48
             createStack(sideMenu.getContentContainer());
48
             createStack(sideMenu.getContentContainer());
49
         }
49
         }
50
     }
50
     }
51
 
51
 
52
-    private void createSideMenu() {
53
-        sideMenu = new SideMenu(getContext(), sideMenuParams);
52
+    private SideMenu createSideMenu() {
53
+        SideMenu sideMenu = new SideMenu(getContext(), sideMenuParams);
54
         RelativeLayout.LayoutParams lp = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
54
         RelativeLayout.LayoutParams lp = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
55
         addView(sideMenu, lp);
55
         addView(sideMenu, lp);
56
+        return sideMenu;
56
     }
57
     }
57
 
58
 
58
     private void createStack(RelativeLayout parent) {
59
     private void createStack(RelativeLayout parent) {
78
     @Override
79
     @Override
79
     public void destroy() {
80
     public void destroy() {
80
         stack.destroy();
81
         stack.destroy();
82
+        if (sideMenu != null) {
83
+            sideMenu.destroy();
84
+        }
81
     }
85
     }
82
 
86
 
83
     @Override
87
     @Override
98
 
102
 
99
     @Override
103
     @Override
100
     public void newStack(ScreenParams params) {
104
     public void newStack(ScreenParams params) {
101
-        RelativeLayout parent = sideMenuParams == null ? this : sideMenu.getContentContainer();
105
+        RelativeLayout parent = sideMenu == null ? this : sideMenu.getContentContainer();
102
         createStack(parent);
106
         createStack(parent);
103
     }
107
     }
104
 
108
 

+ 1
- 0
android/app/src/main/java/com/reactnativenavigation/params/SideMenuParams.java 파일 보기

6
     public String screenId;
6
     public String screenId;
7
     public Bundle navigationParams;
7
     public Bundle navigationParams;
8
     public boolean disableOpenGesture;
8
     public boolean disableOpenGesture;
9
+    public Bundle passProps;
9
 }
10
 }

+ 2
- 0
android/app/src/main/java/com/reactnativenavigation/params/parsers/SideMenuParamsParser.java 파일 보기

9
     public static SideMenuParams parse(Bundle sideMenu) {
9
     public static SideMenuParams parse(Bundle sideMenu) {
10
         SideMenuParams result = new SideMenuParams();
10
         SideMenuParams result = new SideMenuParams();
11
         result.screenId = sideMenu.getString("screenId");
11
         result.screenId = sideMenu.getString("screenId");
12
+        result.navigationParams = sideMenu.getBundle("navigationParams");
12
         result.disableOpenGesture = sideMenu.getBoolean("disableOpenGesture", false);
13
         result.disableOpenGesture = sideMenu.getBoolean("disableOpenGesture", false);
14
+        result.passProps = sideMenu.getBundle("passProps");
13
         return result;
15
         return result;
14
     }
16
     }
15
 }
17
 }

+ 5
- 0
android/app/src/main/java/com/reactnativenavigation/views/SideMenu.java 파일 보기

18
         return contentContainer;
18
         return contentContainer;
19
     }
19
     }
20
 
20
 
21
+    public void destroy() {
22
+        sideMenuView.ensureUnmountOnDetachedFromWindow();
23
+        removeView(sideMenuView);
24
+    }
25
+
21
     public SideMenu(Context context, SideMenuParams sideMenuParams) {
26
     public SideMenu(Context context, SideMenuParams sideMenuParams) {
22
         super(context);
27
         super(context);
23
         createContentContainer();
28
         createContentContainer();

+ 1
- 0
src/deprecated/platformSpecificDeprecated.android.js 파일 보기

143
   result.disableOpenGesture = drawer.disableOpenGesture !== undefined;
143
   result.disableOpenGesture = drawer.disableOpenGesture !== undefined;
144
   result.screenId = drawer.left.screen;
144
   result.screenId = drawer.left.screen;
145
   addNavigatorParams(result);
145
   addNavigatorParams(result);
146
+  result = adaptNavigationParams(result);
146
 
147
 
147
   return result;
148
   return result;
148
 }
149
 }