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,9 +29,13 @@ public class StackController extends ViewController {
29 29
 	}
30 30
 
31 31
 	public void push(final ViewController child) {
32
+		ViewController previousTop = peek();
32 33
 		child.setParentStackController(this);
33 34
 		childControllers.push(child);
34 35
 		getView().addView(child.getView());
36
+		if (previousTop != null) {
37
+			getView().removeView(previousTop.getView());
38
+		}
35 39
 	}
36 40
 
37 41
 	public boolean canPop() {
@@ -40,7 +44,10 @@ public class StackController extends ViewController {
40 44
 
41 45
 	public void pop() {
42 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,4 +133,24 @@ public class StackControllerTest extends BaseTest {
133 133
 		uut.push(child1);
134 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
 }