private static void TabHostItemsSourceChanged(TabHost tabHost, AttachedMemberChangedEventArgs <IEnumerable> arg) { var generator = tabHost.GetBindingMemberValue(AttachedMembers.ViewGroup.ItemsSourceGenerator); if (generator == null) { generator = new TabHostItemsSourceGenerator(tabHost); tabHost.SetBindingMemberValue(AttachedMembers.ViewGroup.ItemsSourceGenerator, generator); } generator.SetItemsSource(arg.NewValue); }
private static void OnTabChanged(Action <TabHostItemsSourceGenerator, object, object, bool, bool> baseAction, TabHostItemsSourceGenerator generator, object oldValue, object newValue, bool clearOldValue, bool setNewValue) { FragmentManager fragmentManager = null; FragmentTransaction ft = null; if (clearOldValue) { var fragment = oldValue as Fragment; if (fragment == null) { baseAction(generator, oldValue, newValue, true, false); } else if (fragment.IsAlive()) { fragmentManager = generator.TabHost.GetFragmentManager(); if (fragmentManager != null) { ft = fragmentManager.BeginTransaction().Detach(fragment); } } } if (setNewValue) { var fragment = newValue as Fragment; if (fragment == null) { baseAction(generator, oldValue, newValue, false, true); } else { if (ft == null) { fragmentManager = generator.TabHost.GetFragmentManager(); if (fragmentManager != null) { ft = fragmentManager.BeginTransaction(); } } if (ft != null) { ft = fragment.IsDetached ? ft.Attach(fragment) : ft.Replace(generator.TabHost.TabContentView.Id, fragment); } } } ft?.CommitAllowingStateLoss(); fragmentManager?.ExecutePendingTransactions(); }
private static void OnRemoveTab(Action <TabHostItemsSourceGenerator, TabHostItemsSourceGenerator.TabInfo> baseAction, TabHostItemsSourceGenerator generator, TabHostItemsSourceGenerator.TabInfo tab) { var fragment = tab.Content as Fragment; if (fragment == null) { baseAction(generator, tab); return; } var fragmentManager = generator.TabHost.GetFragmentManager(); if (fragmentManager == null) { return; } fragmentManager.BeginTransaction() .Remove(fragment) .Commit(); fragmentManager.ExecutePendingTransactions(); }
private static void TabHostItemsSourceChanged(TabHost tabHost, AttachedMemberChangedEventArgs <IEnumerable> arg) { TabHostItemsSourceGenerator.GetOrAdd(tabHost).SetItemsSource(arg.NewValue); }