using Android.Support.V4.App;
using Android.Support.V4.View;
using Android.Views;
+using Xamarin.Forms.Internals;
using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
namespace Xamarin.Forms.Platform.Android.AppCompat
pageRenderer.ViewGroup.RemoveFromParent();
pageRenderer.Dispose();
}
+ pageToRemove.PropertyChanged -= OnPagePropertyChanged;
pageToRemove.ClearValue(Android.Platform.RendererProperty);
}
pager.Id = FormsAppCompatActivity.GetUniqueId();
pager.AddOnPageChangeListener(this);
- tabs.SetupWithViewPager(pager);
- UpdateTabIcons();
- tabs.SetOnTabSelectedListener(this);
-
AddView(pager);
AddView(tabs);
+
+ OnChildrenCollectionChanged(null, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
}
TabbedPage tabbedPage = e.NewElement;
if (tabbedPage.CurrentPage != null)
ScrollToCurrentPage();
- UpdateIgnoreContainerAreas();
((IPageController)tabbedPage).InternalChildren.CollectionChanged += OnChildrenCollectionChanged;
UpdateBarBackgroundColor();
UpdateBarTextColor();
void OnChildrenCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
+ e.Apply((o, i, c) => SetupPage((Page)o), (o, i) => TeardownPage((Page)o), Reset);
+
FormsViewPager pager = _viewPager;
TabLayout tabs = _tabLayout;
UpdateIgnoreContainerAreas();
}
+ void TeardownPage(Page page)
+ {
+ page.PropertyChanged -= OnPagePropertyChanged;
+ }
+
+ void SetupPage(Page page)
+ {
+ page.PropertyChanged += OnPagePropertyChanged;
+ }
+
+ void Reset()
+ {
+ foreach (var page in Element.Children)
+ SetupPage(page);
+ }
+
+ void OnPagePropertyChanged(object sender, PropertyChangedEventArgs e)
+ {
+ if (e.PropertyName == Page.TitleProperty.PropertyName)
+ {
+ var page = (Page)sender;
+ var index = Element.Children.IndexOf(page);
+ TabLayout.Tab tab = _tabLayout.GetTabAt(index);
+ tab.SetText(page.Title);
+ }
+ }
+
void ScrollToCurrentPage()
{
((Platform)Element.Platform).NavAnimationInProgress = true;