浏览代码

viewController holds ref to navigationController

Daniel Zlotin 8 年前
父节点
当前提交
aa191947bc

+ 0
- 12
lib/android/app/src/main/java/com/reactnativenavigation/NavigationActivity.java 查看文件

3
 import android.os.Bundle;
3
 import android.os.Bundle;
4
 import android.support.annotation.Nullable;
4
 import android.support.annotation.Nullable;
5
 import android.support.v7.app.AppCompatActivity;
5
 import android.support.v7.app.AppCompatActivity;
6
-import android.view.View;
7
 import android.widget.FrameLayout;
6
 import android.widget.FrameLayout;
8
 
7
 
9
 import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
8
 import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
11
 import com.reactnativenavigation.layout.impl.StackLayout;
10
 import com.reactnativenavigation.layout.impl.StackLayout;
12
 
11
 
13
 public class NavigationActivity extends AppCompatActivity implements DefaultHardwareBackBtnHandler {
12
 public class NavigationActivity extends AppCompatActivity implements DefaultHardwareBackBtnHandler {
14
-	private View contentView;
15
 	private Layout layout;
13
 	private Layout layout;
16
 
14
 
17
 	@Override
15
 	@Override
39
 		app().getInitializer().onActivityDestroyed(this);
37
 		app().getInitializer().onActivityDestroyed(this);
40
 	}
38
 	}
41
 
39
 
42
-	@Override
43
-	public void setContentView(View contentView) {
44
-		super.setContentView(contentView);
45
-		this.contentView = contentView;
46
-	}
47
 
40
 
48
 	public void setLayout(Layout layout) {
41
 	public void setLayout(Layout layout) {
49
 		this.layout = layout;
42
 		this.layout = layout;
53
 		return layout;
46
 		return layout;
54
 	}
47
 	}
55
 
48
 
56
-	@Nullable
57
-	public View getContentView() {
58
-		return contentView;
59
-	}
60
-
61
 	@Override
49
 	@Override
62
 	public void invokeDefaultOnBackPressed() {
50
 	public void invokeDefaultOnBackPressed() {
63
 		onBackPressed();
51
 		onBackPressed();

+ 2
- 1
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/NavigationController.java 查看文件

8
 
8
 
9
 	public NavigationController(ViewController... childControllers) {
9
 	public NavigationController(ViewController... childControllers) {
10
 		for (ViewController childController : childControllers) {
10
 		for (ViewController childController : childControllers) {
11
-			this.childControllers.push(childController);
11
+			push(childController);
12
 		}
12
 		}
13
 	}
13
 	}
14
 
14
 
18
 
18
 
19
 	public void push(final ViewController child) {
19
 	public void push(final ViewController child) {
20
 		childControllers.push(child);
20
 		childControllers.push(child);
21
+		child.setNavigationController(this);
21
 	}
22
 	}
22
 
23
 
23
 	public void pop() {
24
 	public void pop() {

+ 11
- 0
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/ViewController.java 查看文件

1
 package com.reactnativenavigation.viewcontrollers;
1
 package com.reactnativenavigation.viewcontrollers;
2
 
2
 
3
+import android.support.annotation.Nullable;
3
 import android.view.View;
4
 import android.view.View;
4
 
5
 
5
 public class ViewController {
6
 public class ViewController {
6
 	private View view;
7
 	private View view;
8
+	private NavigationController navigationController;
7
 
9
 
8
 	public View getView() {
10
 	public View getView() {
9
 		return view;
11
 		return view;
12
 	public void setView(final View view) {
14
 	public void setView(final View view) {
13
 		this.view = view;
15
 		this.view = view;
14
 	}
16
 	}
17
+
18
+	@Nullable
19
+	public NavigationController getNavigationController() {
20
+		return navigationController;
21
+	}
22
+
23
+	void setNavigationController(final NavigationController navigationController) {
24
+		this.navigationController = navigationController;
25
+	}
15
 }
26
 }

+ 9
- 0
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/NavigationControllerTest.java 查看文件

63
 		assertThat(uut.isEmpty()).isFalse();
63
 		assertThat(uut.isEmpty()).isFalse();
64
 	}
64
 	}
65
 
65
 
66
+	@Test
67
+	public void pushAssignsRefToSelfOnPushedController() throws Exception {
68
+		assertThat(child1.getNavigationController()).isNull();
69
+		uut.push(child1);
70
+		assertThat(child1.getNavigationController()).isEqualTo(uut);
71
+
72
+		NavigationController anotherNavController = new NavigationController(child2);
73
+		assertThat(child2.getNavigationController()).isEqualTo(anotherNavController);
74
+	}
66
 }
75
 }

+ 15
- 2
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/ViewControllerTest.java 查看文件

10
 import static org.assertj.core.api.Java6Assertions.assertThat;
10
 import static org.assertj.core.api.Java6Assertions.assertThat;
11
 
11
 
12
 public class ViewControllerTest extends BaseTest {
12
 public class ViewControllerTest extends BaseTest {
13
+
14
+	private ViewController uut;
15
+
16
+	@Override
17
+	public void beforeEach() {
18
+		super.beforeEach();
19
+		uut = new ViewController();
20
+	}
21
+
13
 	@Test
22
 	@Test
14
 	public void holdsAView() throws Exception {
23
 	public void holdsAView() throws Exception {
15
-		ViewController uut = new ViewController();
16
 		assertThat(uut.getView()).isNull();
24
 		assertThat(uut.getView()).isNull();
17
 		View view = Shadow.newInstanceOf(View.class);
25
 		View view = Shadow.newInstanceOf(View.class);
18
 		uut.setView(view);
26
 		uut.setView(view);
19
 		assertThat(uut.getView()).isEqualTo(view);
27
 		assertThat(uut.getView()).isEqualTo(view);
20
 	}
28
 	}
21
 
29
 
22
-
30
+	@Test
31
+	public void holdsAReferenceToNavigationControllerOrNull() throws Exception {
32
+		assertThat(uut.getNavigationController()).isNull();
33
+		NavigationController nav = new NavigationController(uut);
34
+		assertThat(uut.getNavigationController()).isEqualTo(nav);
35
+	}
23
 }
36
 }