|
@@ -6,7 +6,6 @@ import android.util.AttributeSet;
|
6
|
6
|
import android.widget.FrameLayout;
|
7
|
7
|
|
8
|
8
|
import com.facebook.react.ReactInstanceManager;
|
9
|
|
-import com.facebook.react.ReactRootView;
|
10
|
9
|
import com.reactnativenavigation.activities.BaseReactActivity;
|
11
|
10
|
import com.reactnativenavigation.core.RctManager;
|
12
|
11
|
import com.reactnativenavigation.core.objects.Screen;
|
|
@@ -18,6 +17,8 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
|
18
|
17
|
|
19
|
18
|
public class ScreenStack extends FrameLayout {
|
20
|
19
|
|
|
20
|
+ private static final int DISAPPEAR_ANIMATION_DELAY = 200;
|
|
21
|
+
|
21
|
22
|
private static class ScreenView {
|
22
|
23
|
Screen screen;
|
23
|
24
|
RctView view;
|
|
@@ -53,16 +54,17 @@ public class ScreenStack extends FrameLayout {
|
53
|
54
|
}
|
54
|
55
|
|
55
|
56
|
public void push(Screen screen, RctView.OnDisplayedListener onDisplayed) {
|
56
|
|
- RctView oldView = null;
|
57
|
|
- if (!mStack.isEmpty()) {
|
58
|
|
- oldView = mStack.peek().view;
|
59
|
|
- }
|
|
57
|
+ RctView oldView = mStack.isEmpty() ? null : mStack.peek().view;
|
60
|
58
|
RctView view = new RctView(mReactActivity, mReactInstanceManager, screen, onDisplayed);
|
61
|
|
- addView(view, MATCH_PARENT, MATCH_PARENT);
|
62
|
59
|
if (oldView != null) {
|
63
|
|
- ReactRootView reactRootView = oldView.getReactRootView();
|
64
|
|
- ReflectionUtils.setBooleanField(reactRootView, "mAttachScheduled", true);
|
|
60
|
+ addView(view, MATCH_PARENT, MATCH_PARENT);
|
|
61
|
+
|
|
62
|
+ ReflectionUtils.setBooleanField(oldView.getReactRootView(), "mAttachScheduled", true);
|
|
63
|
+ getLayoutTransition().setStartDelay(LayoutTransition.DISAPPEARING, DISAPPEAR_ANIMATION_DELAY);
|
65
|
64
|
removeView(oldView);
|
|
65
|
+ getLayoutTransition().setStartDelay(LayoutTransition.DISAPPEARING, 0);
|
|
66
|
+ } else {
|
|
67
|
+ addView(view, MATCH_PARENT, MATCH_PARENT);
|
66
|
68
|
}
|
67
|
69
|
mStack.push(new ScreenView(screen, view));
|
68
|
70
|
}
|
|
@@ -99,7 +101,7 @@ public class ScreenStack extends FrameLayout {
|
99
|
101
|
addView(mStack.peek().view, 0);
|
100
|
102
|
}
|
101
|
103
|
|
102
|
|
- return oldScreenView.screen;
|
|
104
|
+ return oldScreenView != null ? oldScreenView.screen : null;
|
103
|
105
|
}
|
104
|
106
|
|
105
|
107
|
public Screen resetTo(Screen screen) {
|