private static void ActionBarSelectedItemChanged(ActionBar actionBar, AttachedMemberChangedEventArgs <object> args)
        {
            switch (actionBar.GetNavigationMode())
            {
            case ActionBarNavigationMode.List:
#if APPCOMPAT
                var adapter = actionBar.GetBindingMemberValue(AttachedMembersCompat.ActionBar.ItemsSourceAdapter);
#else
                var adapter = actionBar.GetBindingMemberValue(AttachedMembers.ActionBar.ItemsSourceAdapter);
#endif

                if (adapter == null || adapter.ItemsSource == null)
                {
                    return;
                }
                if (args.NewValue == null)
                {
                    args.Member.SetSingleValue(actionBar, adapter.GetRawItem(actionBar.SelectedNavigationIndex));
                }
                else
                {
                    actionBar.SetSelectedNavigationItem(adapter.GetPosition(args.NewValue));
                }
                break;

            case ActionBarNavigationMode.Tabs:
#if APPCOMPAT
                var tabGenerator = actionBar.GetBindingMemberValue(AttachedMembersCompat.ActionBar.ItemsSourceGenerator) as IItemsSourceGeneratorEx;
#else
                var tabGenerator = actionBar.GetBindingMemberValue(AttachedMembers.ActionBar.ItemsSourceGenerator) as IItemsSourceGeneratorEx;
#endif
                if (tabGenerator == null)
                {
                    var tabValue = args.NewValue as ActionBar.Tab;
                    if (tabValue != null && tabValue.Position != actionBar.SelectedNavigationIndex)
                    {
                        tabValue.Select();
                    }
                }
                else
                {
                    if (args.NewValue == null)
                    {
                        object ctx = actionBar.SelectedNavigationIndex < 0 ? null : actionBar.SelectedTab;
                        if (ctx != null)
                        {
                            ctx = ctx.DataContext();
                        }
                        args.Member.SetSingleValue(actionBar, ctx);
                    }
                    else
                    {
                        tabGenerator.SelectedItem = args.NewValue;
                    }
                }
                break;
            }
        }
Beispiel #2
0
        private static void ActionBarUpdateItemsSource(ActionBar actionBar)
        {
            switch (actionBar.GetNavigationMode())
            {
            case ActionBarNavigationMode.List:
#if APPCOMPAT
                IItemsSourceAdapter sourceAdapter = actionBar.GetBindingMemberValue(AttachedMembersCompat.ActionBar.ItemsSourceAdapter);
#else
                IItemsSourceAdapter sourceAdapter = actionBar.GetBindingMemberValue(AttachedMembers.ActionBar.ItemsSourceAdapter);
#endif
                if (sourceAdapter == null)
                {
                    sourceAdapter = AndroidToolkitExtensions.ItemsSourceAdapterFactory(actionBar, actionBar.ThemedContext, DataContext.Empty);
#if APPCOMPAT
                    actionBar.SetBindingMemberValue(AttachedMembersCompat.ActionBar.ItemsSourceAdapter, sourceAdapter);
#else
                    actionBar.SetBindingMemberValue(AttachedMembers.ActionBar.ItemsSourceAdapter, sourceAdapter);
#endif
                    actionBar.SetListNavigationCallbacks(sourceAdapter, new ActionBarNavigationListener(actionBar));
                }
#if APPCOMPAT
                sourceAdapter.ItemsSource = actionBar.GetBindingMemberValue(AttachedMembersCompat.ActionBar.ItemsSource);
#else
                sourceAdapter.ItemsSource = actionBar.GetBindingMemberValue(AttachedMembers.ActionBar.ItemsSource);
#endif
                break;

            case ActionBarNavigationMode.Standard:
#if APPCOMPAT
                actionBar.SetBindingMemberValue(AttachedMembersCompat.ActionBar.SelectedItem, BindingExtensions.NullValue);
#else
                actionBar.SetBindingMemberValue(AttachedMembers.ActionBar.SelectedItem, BindingExtensions.NullValue);
#endif

                actionBar.SetListNavigationCallbacks(null, null);
#if APPCOMPAT
                actionBar.GetBindingMemberValue(AttachedMembersCompat.ActionBar.ItemsSourceGenerator)?.SetItemsSource(null);
                var adapter = actionBar.GetBindingMemberValue(AttachedMembersCompat.ActionBar.ItemsSourceAdapter);
#else
                actionBar.GetBindingMemberValue(AttachedMembers.ActionBar.ItemsSourceGenerator)?.SetItemsSource(null);
                var adapter = actionBar.GetBindingMemberValue(AttachedMembers.ActionBar.ItemsSourceAdapter);
#endif
                if (adapter != null)
                {
                    adapter.ItemsSource = null;
                }
                break;

            case ActionBarNavigationMode.Tabs:
#if APPCOMPAT
                actionBar.GetBindingMemberValue(AttachedMembersCompat.ActionBar.ItemsSourceGenerator)?.SetItemsSource(actionBar.GetBindingMemberValue(AttachedMembersCompat.ActionBar.ItemsSource));
#else
                actionBar.GetBindingMemberValue(AttachedMembers.ActionBar.ItemsSourceGenerator)?.SetItemsSource(actionBar.GetBindingMemberValue(AttachedMembers.ActionBar.ItemsSource));
#endif

                break;
            }
        }
            private void OnBackPressing(Activity sender, CancelEventArgs args)
            {
                var value = _actionBar.GetBindingMemberValue(AttachedMembersCompat.ActionBar.ContextActionBarVisible);

                if (value)
                {
                    args.Cancel = true;
                }
                _actionBar.SetBindingMemberValue(AttachedMembersCompat.ActionBar.ContextActionBarVisible, false);
            }
Beispiel #4
0
        protected override void Refresh()
        {
            var manager = GetCollectionViewManager();

            for (int i = 0; i < _actionBar.TabCount; i++)
            {
                ActionBarTabTemplate.ClearTab(_actionBar, _actionBar.GetTabAt(i), true);
            }
            if (manager == null)
            {
                _actionBar.RemoveAllTabs();
            }
            else
            {
                manager.Clear(_actionBar);
            }

            IEnumerable itemsSource = ItemsSource;

            if (itemsSource == null)
            {
                return;
            }

#if APPCOMPAT
            var selectedItem = _actionBar.GetBindingMemberValue(AttachedMembersCompat.ActionBar.SelectedItem);
#else
            var selectedItem = _actionBar.GetBindingMemberValue(AttachedMembers.ActionBar.SelectedItem);
#endif
            int count = itemsSource.Count();
            for (int index = 0; index < count; index++)
            {
                var item = GetItem(index);
                var tab  = CreateTab(item);
                if (manager == null)
                {
                    _actionBar.AddTab(tab, index, ReferenceEquals(selectedItem, item));
                }
                else
                {
                    manager.Insert(_actionBar, index, tab);
                }
            }
            if (count == 0)
            {
                OnEmptyTab();
            }
        }
Beispiel #5
0
            public bool OnNavigationItemSelected(int itemPosition, long itemId)
            {
#if APPCOMPAT
                var adapter = _actionBar?.GetBindingMemberValue(AttachedMembersCompat.ActionBar.ItemsSourceAdapter);
#else
                var adapter = _actionBar?.GetBindingMemberValue(AttachedMembers.ActionBar.ItemsSourceAdapter);
#endif

                if (adapter == null)
                {
                    return(false);
                }
#if APPCOMPAT
                _actionBar.SetBindingMemberValue(AttachedMembersCompat.ActionBar.SelectedItem, adapter.GetRawItem(itemPosition));
#else
                _actionBar.SetBindingMemberValue(AttachedMembers.ActionBar.SelectedItem, adapter.GetRawItem(itemPosition));
#endif
                return(true);
            }
Beispiel #6
0
            public bool OnCreateActionMode(ActionMode mode, IMenu menu)
            {
#if APPCOMPAT
                var templateId = _actionBar?.GetBindingMemberValue(AttachedMembersCompat.ActionBar.ContextActionBarTemplate);
#else
                var templateId = _actionBar?.GetBindingMemberValue(AttachedMembers.ActionBar.ContextActionBarTemplate);
#endif
                if (templateId == null)
                {
                    return(false);
                }
                var activity = _actionBar.ThemedContext.GetActivity();
                if (activity == null)
                {
                    Tracer.Warn("The activity is null action bar {0}", _actionBar);
                    return(false);
                }
                activity.MenuInflater.Inflate(templateId.Value, menu, _actionBar);
                return(true);
            }
            private void SetContent(ActionBar.Tab tab, FragmentTransaction ft, int? placeHolder, Activity activity, ActionBar bar)
            {
                if (placeHolder == null)
                {
                    Tracer.Error("The placeholder for tab {0} was not found.", tab);
                    return;
                }
                var layout = activity.FindViewById<ViewGroup>(placeHolder.Value);
                if (layout == null)
                {
                    Tracer.Warn("The ActionBarTabContentId with id = {0} is not found in activity {1}",
                        placeHolder.Value,
                        activity);
                    return;
                }
                if (_content == null)
                {
#if APPCOMPAT
                    _content = tab.GetBindingMemberValue(AttachedMembersCompat.ActionBarTab.Content);
#else
                    _content = tab.GetBindingMemberValue(AttachedMembers.ActionBarTab.Content);
#endif

                    var viewModel = _content as IViewModel;
                    if (viewModel == null)
                    {
                        var fragmentClass = _content as string;
                        //If content is a string, trying to create a fragment.
                        if (!string.IsNullOrEmpty(fragmentClass))
                        {
                            var type = TypeCache<Fragment>.Instance.GetTypeByName(fragmentClass, true, false);
                            if (type != null)
                            {
                                var fragment = Fragment.Instantiate(bar.ThemedContext, Java.Lang.Class.FromType(type).Name);
                                _content = fragment;
                            }
                        }
                        else if (_content is int)
                            _content = activity.GetBindableLayoutInflater().Inflate((int)_content, null);
                    }
                    else
                        viewModel.Settings.Metadata.AddOrUpdate(ViewModelConstants.StateNotNeeded, true);
                    _content = PlatformExtensions.GetContentView(layout, layout.Context, _content,
                        _contentTemplateProvider.GetTemplateId(), _contentTemplateProvider.GetDataTemplateSelector());
                    layout.SetContentView(_content, ft, (@group, fragment, arg3) =>
                    {
                        if (fragment.IsDetached)
                            arg3.Attach(fragment);
                        else
                            arg3.Replace(@group.Id, fragment);
                    });
                }
                else
                    layout.SetContentView(_content, ft, (@group, fragment, arg3) => arg3.Attach(fragment));
            }
            public void OnTabSelected(ActionBar.Tab tab, FragmentTransaction ft)
            {
                if (_cleared)
                    return;
                var bar = (ActionBar)tab.GetBindingMemberValue(AttachedMembers.Object.Parent);
                var placeHolder = ActionBarView.GetTabContentId(bar);
                var activity = bar.ThemedContext.GetActivity();
                SetContent(tab, ft, placeHolder, activity, bar);
                //Set selected item data context or tab
                var selectedItem = bar.GetBindingMemberValue(ItemsSourceGeneratorBase.MemberDescriptor) == null ? tab : tab.GetDataContext();
#if APPCOMPAT
                bar.SetBindingMemberValue(AttachedMembersCompat.ActionBar.SelectedItem, selectedItem);
#else
                bar.SetBindingMemberValue(AttachedMembers.ActionBar.SelectedItem, selectedItem);
#endif
            }