diff options
Diffstat (limited to 'Xamarin.Forms.Platform.Tizen')
-rwxr-xr-x[-rw-r--r--] | Xamarin.Forms.Platform.Tizen/Renderers/NavigationPageRenderer.cs | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/Xamarin.Forms.Platform.Tizen/Renderers/NavigationPageRenderer.cs b/Xamarin.Forms.Platform.Tizen/Renderers/NavigationPageRenderer.cs index 7a2f7326..84481fc6 100644..100755 --- a/Xamarin.Forms.Platform.Tizen/Renderers/NavigationPageRenderer.cs +++ b/Xamarin.Forms.Platform.Tizen/Renderers/NavigationPageRenderer.cs @@ -35,6 +35,7 @@ namespace Xamarin.Forms.Platform.Tizen Page _previousPage = null; TaskCompletionSource<bool> _currentTaskSource = null; ToolbarTracker _toolbarTracker = null; + IDictionary<Page, NaviItem> _naviItemMap; Page CurrentPage => Element.CurrentPage; Page PreviousPage => Element.Navigation.NavigationStack.Count > 1 ? Element.Navigation.NavigationStack[Element.Navigation.NavigationStack.Count - 2] : null; @@ -67,6 +68,7 @@ namespace Xamarin.Forms.Platform.Tizen _naviFrame.AnimationFinished += OnAnimationFinished; SetNativeControl(_naviFrame); + _naviItemMap = new Dictionary<Page, NaviItem>(); } if (_toolbarTracker == null) @@ -102,7 +104,7 @@ namespace Xamarin.Forms.Platform.Tizen foreach (Page page in pageController.InternalChildren) { - _naviFrame.Push(Platform.GetOrCreateRenderer(page).NativeView, SpanTitle(page.Title)); + _naviItemMap[page] = _naviFrame.Push(Platform.GetOrCreateRenderer(page).NativeView, SpanTitle(page.Title)); page.PropertyChanged += NavigationBarPropertyChangedHandler; UpdateHasNavigationBar(page); @@ -288,24 +290,12 @@ namespace Xamarin.Forms.Platform.Tizen NaviItem GetNaviItemForPage(Page page) { - NaviItem item = null; - - if (page != null) + NaviItem item; + if (_naviItemMap.TryGetValue(page, out item)) { - IVisualElementRenderer renderer = Platform.GetRenderer(page); - if (renderer != null) - { - EvasObject content = renderer.NativeView; - - for (int i = _naviFrame.NavigationStack.Count - 1; i >= 0; --i) - if (_naviFrame.NavigationStack[i].Content == content) - { - item = _naviFrame.NavigationStack[i]; - break; - } - } + return item; } - return item; + return null; } Native.Button GetToolbarButton(ToolbarButtonPosition position) @@ -403,16 +393,20 @@ namespace Xamarin.Forms.Platform.Tizen CompleteCurrentNavigationTask(); } else + { CurrentNaviItem?.Delete(); + } + + if (_naviItemMap.ContainsKey(nre.Page)) + _naviItemMap.Remove(nre.Page); } } void OnPopToRootRequested(object sender, NavigationRequestedEventArgs nre) { List<NaviItem> copyOfStack = new List<NaviItem>(_naviFrame.NavigationStack); - copyOfStack.Reverse(); - NaviItem topItem = copyOfStack.FirstOrDefault(); - NaviItem rootItem = copyOfStack.LastOrDefault(); + NaviItem rootItem = copyOfStack.FirstOrDefault(); + NaviItem topItem = copyOfStack.LastOrDefault(); foreach (NaviItem naviItem in copyOfStack) if (naviItem != rootItem && naviItem != topItem) @@ -431,13 +425,16 @@ namespace Xamarin.Forms.Platform.Tizen else topItem?.Delete(); } + + _naviItemMap.Clear(); + _naviItemMap[Element.Navigation.NavigationStack.Last()] = rootItem; } void OnPushRequested(object sender, NavigationRequestedEventArgs nre) { if (nre.Animated || _naviFrame.NavigationStack.Count == 0) { - _naviFrame.Push(Platform.GetOrCreateRenderer(nre.Page).NativeView, SpanTitle(nre.Page.Title)); + _naviItemMap[nre.Page] = _naviFrame.Push(Platform.GetOrCreateRenderer(nre.Page).NativeView, SpanTitle(nre.Page.Title)); _currentTaskSource = new TaskCompletionSource<bool>(); nre.Task = _currentTaskSource.Task; @@ -446,14 +443,17 @@ namespace Xamarin.Forms.Platform.Tizen CompleteCurrentNavigationTask(); } else - _naviFrame.InsertAfter(_naviFrame.NavigationStack.Last(), Platform.GetOrCreateRenderer(nre.Page).NativeView, SpanTitle(nre.Page.Title)); - + { + _naviItemMap[nre.Page] = _naviFrame.InsertAfter(_naviFrame.NavigationStack.Last(), Platform.GetOrCreateRenderer(nre.Page).NativeView, SpanTitle(nre.Page.Title)); + } UpdateHasNavigationBar(nre.Page); } void OnRemovePageRequested(object sender, NavigationRequestedEventArgs nre) { GetNaviItemForPage(nre.Page).Delete(); + if (_naviItemMap.ContainsKey(nre.Page)) + _naviItemMap.Remove(nre.Page); } void OnInsertPageBeforeRequested(object sender, NavigationRequestedEventArgs nre) @@ -464,7 +464,7 @@ namespace Xamarin.Forms.Platform.Tizen throw new ArgumentNullException("page"); EvasObject page = Platform.GetOrCreateRenderer(nre.Page).NativeView; - _naviFrame.InsertBefore(GetNaviItemForPage(nre.BeforePage), page, SpanTitle(nre.Page.Title)); + _naviItemMap[nre.Page] = _naviFrame.InsertBefore(GetNaviItemForPage(nre.BeforePage), page, SpanTitle(nre.Page.Title)); UpdateHasNavigationBar(nre.Page); } |