コード例 #1
0
        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);
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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();
        }
コード例 #4
0
 private static void TabHostItemsSourceChanged(TabHost tabHost, AttachedMemberChangedEventArgs <IEnumerable> arg)
 {
     TabHostItemsSourceGenerator.GetOrAdd(tabHost).SetItemsSource(arg.NewValue);
 }