mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
Fix broken navigation after clear history with transition
Resolves #1948
This commit is contained in:
@@ -431,6 +431,17 @@ export class Frame extends CustomLayoutView implements definition.Frame {
|
||||
public _removeViewFromNativeVisualTree(child: View): void {
|
||||
child._isAddedToNativeVisualTree = false;
|
||||
}
|
||||
|
||||
public _printFrameBackStack() {
|
||||
var length = this.backStack.length;
|
||||
var i = length - 1;
|
||||
console.log("---------------------------");
|
||||
console.log("Frame Back Stack (" + length + ")");
|
||||
while (i >= 0) {
|
||||
var backstackEntry = <definition.BackstackEntry>this.backStack[i--];
|
||||
console.log("[ " + backstackEntry.resolvedPage.id + " ]");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var _topmost = function (): Frame {
|
||||
|
||||
@@ -65,8 +65,9 @@ function onFragmentHidden(fragment: FragmentClass) {
|
||||
trace.write(`HIDDEN ${fragment.getTag()}`, trace.categories.NativeLifecycle);
|
||||
|
||||
if (fragment[CLEARING_HISTORY]) {
|
||||
trace.write(`${fragment.getTag()} has been hidden, but we are currently clearing history. Returning.`, trace.categories.NativeLifecycle);
|
||||
return null;
|
||||
trace.write(`${fragment.getTag()} has been hidden, but we are currently clearing history. Clearing any existing transitions.`, trace.categories.NativeLifecycle);
|
||||
transitionModule._clearBackwardTransitions(fragment);
|
||||
transitionModule._clearForwardTransitions(fragment);
|
||||
}
|
||||
|
||||
var isBack = fragment.entry[IS_BACK];
|
||||
@@ -188,10 +189,10 @@ export class Frame extends frameCommon.Frame {
|
||||
if (currentFragment) {
|
||||
// There might be transitions left over from previous forward navigations from the current page.
|
||||
transitionModule._clearForwardTransitions(currentFragment);
|
||||
}
|
||||
|
||||
if (animated && navigationTransition) {
|
||||
transitionModule._setAndroidFragmentTransitions(navigationTransition, currentFragment, newFragment, fragmentTransaction);
|
||||
if (animated && navigationTransition) {
|
||||
transitionModule._setAndroidFragmentTransitions(navigationTransition, currentFragment, newFragment, fragmentTransaction);
|
||||
}
|
||||
}
|
||||
|
||||
newFragment.frame = this;
|
||||
@@ -328,17 +329,6 @@ export class Frame extends frameCommon.Frame {
|
||||
}
|
||||
}
|
||||
|
||||
public _printFrameBackStack() {
|
||||
var length = this.backStack.length;
|
||||
var i = length - 1;
|
||||
console.log("---------------------------");
|
||||
console.log("Frame Back Stack (" + length + ")");
|
||||
while (i >= 0) {
|
||||
var backstackEntry = <definition.BackstackEntry>this.backStack[i--];
|
||||
console.log("[ " + backstackEntry.resolvedPage.id + " ]");
|
||||
}
|
||||
}
|
||||
|
||||
public _getNavBarVisible(page: pages.Page): boolean {
|
||||
if (types.isDefined(page.actionBarHidden)) {
|
||||
return !page.actionBarHidden;
|
||||
|
||||
@@ -25,6 +25,26 @@ export module AndroidTransitionType {
|
||||
export var popExit: string = "popExit";
|
||||
}
|
||||
|
||||
export function _clearBackwardTransitions(fragment: any): void {
|
||||
if (fragment[ENTER_POPEXIT_TRANSITION]) {
|
||||
trace.write(`Cleared ENTER_POPEXIT_TRANSITION ${fragment[ENTER_POPEXIT_TRANSITION]} for ${fragment.getTag()}`, trace.categories.Transition);
|
||||
fragment[ENTER_POPEXIT_TRANSITION] = undefined;
|
||||
}
|
||||
|
||||
if (_sdkVersion >= 21) {
|
||||
var enterTransition = (<any>fragment).getEnterTransition();
|
||||
if (enterTransition) {
|
||||
trace.write(`Cleared Enter ${enterTransition.getClass().getSimpleName()} transition for ${fragment.getTag()}`, trace.categories.Transition);
|
||||
(<any>fragment).setEnterTransition(null);
|
||||
}
|
||||
var returnTransition = (<any>fragment).getReturnTransition();
|
||||
if (returnTransition) {
|
||||
trace.write(`Cleared Pop Exit ${returnTransition.getClass().getSimpleName()} transition for ${fragment.getTag()}`, trace.categories.Transition);
|
||||
(<any>fragment).setReturnTransition(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function _clearForwardTransitions(fragment: any): void {
|
||||
if (fragment[EXIT_POPENTER_TRANSITION]) {
|
||||
trace.write(`Cleared EXIT_POPENTER_TRANSITION ${fragment[EXIT_POPENTER_TRANSITION]} for ${fragment.getTag()}`, trace.categories.Transition);
|
||||
@@ -265,9 +285,11 @@ function _completePageRemoval(fragment: android.app.Fragment, force: boolean = f
|
||||
if (page.frame) {
|
||||
frame._removeView(page);
|
||||
page.onNavigatedFrom(isBack);
|
||||
trace.write(`REMOVAL of ${page} completed`, trace.categories.Transition);
|
||||
}
|
||||
else {
|
||||
trace.write(`REMOVAL of ${page} has already been done`, trace.categories.Transition);
|
||||
}
|
||||
|
||||
trace.write(`REMOVAL of ${page} completed`, trace.categories.Transition);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
1
ui/transition/transition.d.ts
vendored
1
ui/transition/transition.d.ts
vendored
@@ -18,6 +18,7 @@
|
||||
}
|
||||
|
||||
//@private
|
||||
export function _clearBackwardTransitions(fragment: any): void;
|
||||
export function _clearForwardTransitions(fragment: any): void;
|
||||
export function _setAndroidFragmentTransitions(navigationTransition: frame.NavigationTransition, currentFragment: any, newFragment: any, fragmentTransaction: any): void;
|
||||
export function _onFragmentCreateAnimator(fragment: any, nextAnim: number): any;
|
||||
|
||||
Reference in New Issue
Block a user