private void TryRestoreSelectedIndex(Activity activity, ActionBar actionBar) { if (actionBar.GetNavigationMode() == ActionBarNavigationMode.Standard) { return; } bool result; if (bool.TryParse(RestoreTabSelectedIndex, out result) && !result) { return; } var activityView = activity as IActivityView; if (activityView == null) { return; } if (_activityViewOnSaveInstanceStateDelegate == null) { _activityViewOnSaveInstanceStateDelegate = ActivityViewOnSaveInstanceState; } activityView.Mediator.SaveInstanceState += _activityViewOnSaveInstanceStateDelegate; var bundle = activityView.Mediator.Bundle; if (bundle != null) { var i = bundle.GetInt(SelectedTabIndexKey, int.MinValue); if (i != int.MinValue && i != actionBar.SelectedNavigationIndex) { actionBar.SetSelectedNavigationItem(i); } } }
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; } }
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 TryRestoreSelectedIndex(Activity activity, ActionBar actionBar) { if (actionBar.GetNavigationMode() == ActionBarNavigationMode.Standard) return; bool result; if (bool.TryParse(RestoreTabSelectedIndex, out result) && !result) return; var activityView = activity as IActivityView; if (activityView == null) return; activityView.Mediator.SaveInstanceState += ActivityViewOnSaveInstanceState; var bundle = activityView.Mediator.Bundle; if (bundle != null) { var i = bundle.GetInt(SelectedTabIndexKey, int.MinValue); if (i != int.MinValue && i != actionBar.SelectedNavigationIndex) actionBar.SetSelectedNavigationItem(i); } }