internal void SetPage(Page newRoot) { var layout = false; if (Page != null) { _renderer.RemoveAllViews(); foreach (IVisualElementRenderer rootRenderer in _navModel.Roots.Select(GetRenderer)) { rootRenderer.Dispose(); } _navModel = new NavigationModel(); layout = true; } if (newRoot == null) { return; } _navModel.Push(newRoot, null); Page = newRoot; Page.Platform = this; AddChild(Page, layout); Application.Current.NavigationProxy.Inner = this; _toolbarTracker.Target = newRoot; UpdateActionBar(); }
internal void SetPage(Page newRoot) { var layout = false; List <IVisualElementRenderer> toDispose = null; if (Page != null) { _renderer.RemoveAllViews(); toDispose = _navModel.Roots.Select(Android.Platform.GetRenderer).ToList(); _navModel = new NavigationModel(); layout = true; } if (newRoot == null) { return; } _navModel.Push(newRoot, null); Page = newRoot; Page.Platform = this; AddChild(Page, layout); Application.Current.NavigationProxy.Inner = this; _toolbarTracker.Target = newRoot; UpdateActionBar(); if (toDispose?.Count > 0) { // Queue up disposal of the previous renderers after the current layout updates have finished new Handler(Looper.MainLooper).Post(() => { foreach (IVisualElementRenderer rootRenderer in toDispose) { rootRenderer.Dispose(); } }); } }