diff --git a/tns-core-modules/ui/core/view-base/view-base.ts b/tns-core-modules/ui/core/view-base/view-base.ts index e1196636f..6fe0a1bc8 100644 --- a/tns-core-modules/ui/core/view-base/view-base.ts +++ b/tns-core-modules/ui/core/view-base/view-base.ts @@ -595,13 +595,13 @@ export abstract class ViewBase extends Observable implements ViewBaseDefinition } public loadView(view: ViewBase): void { - if (!view.isLoaded) { + if (view && !view.isLoaded) { view.callLoaded(); } } public unloadView(view: ViewBase): void { - if (view.isLoaded) { + if (view && view.isLoaded) { view.callUnloaded(); } } diff --git a/tns-core-modules/ui/core/view/view.android.ts b/tns-core-modules/ui/core/view/view.android.ts index c32b0342f..128b24db1 100644 --- a/tns-core-modules/ui/core/view/view.android.ts +++ b/tns-core-modules/ui/core/view/view.android.ts @@ -180,7 +180,7 @@ function initializeDialogFragment() { } const owner = this.owner; - if (!owner.isLoaded) { + if (owner && !owner.isLoaded) { owner.callLoaded(); } @@ -196,7 +196,7 @@ function initializeDialogFragment() { } const owner = this.owner; - if (owner.isLoaded) { + if (owner && owner.isLoaded) { owner.callUnloaded(); } } diff --git a/tns-core-modules/ui/frame/frame.android.ts b/tns-core-modules/ui/frame/frame.android.ts index a8917fb23..bdef9098e 100644 --- a/tns-core-modules/ui/frame/frame.android.ts +++ b/tns-core-modules/ui/frame/frame.android.ts @@ -9,7 +9,7 @@ import { Page } from "../page"; import * as application from "../../application"; import { FrameBase, stack, goBack, View, Observable, - traceEnabled, traceWrite, traceCategories + traceEnabled, traceWrite, traceCategories, traceError } from "./frame-common"; import { @@ -696,8 +696,23 @@ class FragmentCallbacksImplementation implements AndroidFragmentCallbacks { } const entry = this.entry; + if (!entry) { + traceError(`${fragment}.onCreateView: entry is null or undefined`); + return null; + } + const page = entry.resolvedPage; + if (!page) { + traceError(`${fragment}.onCreateView: entry has no resolvedPage`); + return null; + } + const frame = this.frame; + if (!frame) { + traceError(`${fragment}.onCreateView: this.frame is null or undefined`); + return null; + } + if (page.parent === frame) { // If we are navigating to a page that was destroyed // reinitialize its UI. @@ -706,12 +721,12 @@ class FragmentCallbacksImplementation implements AndroidFragmentCallbacks { page._setupUI(context); } } else { - if (!this.frame._styleScope) { + if (!frame._styleScope) { // Make sure page will have styleScope even if parents don't. page._updateStyleScope(); } - this.frame._addView(page); + frame._addView(page); } if (frame.isLoaded && !page.isLoaded) { diff --git a/tns-core-modules/ui/styling/style-scope.ts b/tns-core-modules/ui/styling/style-scope.ts index c1028201e..8e0df7dd1 100644 --- a/tns-core-modules/ui/styling/style-scope.ts +++ b/tns-core-modules/ui/styling/style-scope.ts @@ -357,7 +357,7 @@ export class CssState { * As a result, at some point in time, the selectors matched have to be requerried from the style scope and applied to the view. */ public onChange(): void { - if (this.view.isLoaded) { + if (this.view && this.view.isLoaded) { this.unsubscribeFromDynamicUpdates(); this.updateMatch(); this.subscribeForDynamicUpdates();