Browse Source

push and pop mechanics

Daniel Zlotin 7 years ago
parent
commit
d627a405a4

+ 8
- 1
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/StackController.java View File

29
 	}
29
 	}
30
 
30
 
31
 	public void push(final ViewController child) {
31
 	public void push(final ViewController child) {
32
+		ViewController previousTop = peek();
32
 		child.setParentStackController(this);
33
 		child.setParentStackController(this);
33
 		childControllers.push(child);
34
 		childControllers.push(child);
34
 		getView().addView(child.getView());
35
 		getView().addView(child.getView());
36
+		if (previousTop != null) {
37
+			getView().removeView(previousTop.getView());
38
+		}
35
 	}
39
 	}
36
 
40
 
37
 	public boolean canPop() {
41
 	public boolean canPop() {
40
 
44
 
41
 	public void pop() {
45
 	public void pop() {
42
 		if (canPop()) {
46
 		if (canPop()) {
43
-			childControllers.pop();
47
+			ViewController poppedController = childControllers.pop();
48
+			getView().removeView(poppedController.getView());
49
+			ViewController previousTop = peek();
50
+			getView().addView(previousTop.getView());
44
 		}
51
 		}
45
 	}
52
 	}
46
 
53
 

+ 20
- 0
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/StackControllerTest.java View File

133
 		uut.push(child1);
133
 		uut.push(child1);
134
 		assertThat(uut.getView().getChildCount()).isEqualTo(1);
134
 		assertThat(uut.getView().getChildCount()).isEqualTo(1);
135
 	}
135
 	}
136
+
137
+	@Test
138
+	public void pushRemovesPreviousFromTree() throws Exception {
139
+		assertThat(uut.getView().getChildCount()).isZero();
140
+		uut.push(child1);
141
+		assertThat(uut.getView().getChildCount()).isEqualTo(1);
142
+		uut.push(child2);
143
+		assertThat(uut.getView().getChildCount()).isEqualTo(1);
144
+	}
145
+
146
+	@Test
147
+	public void popReplacesViewWithPrevious() throws Exception {
148
+		uut.push(child1);
149
+		uut.push(child2);
150
+		assertThat(uut.getView().getChildCount()).isEqualTo(1);
151
+		assertThat(uut.getView().getChildAt(0)).isEqualTo(child2.getView());
152
+		uut.pop();
153
+		assertThat(uut.getView().getChildCount()).isEqualTo(1);
154
+		assertThat(uut.getView().getChildAt(0)).isEqualTo(child1.getView());
155
+	}
136
 }
156
 }