代码之家  ›  专栏  ›  技术社区  ›  m_jero

在使用工具栏的对话框中旋转后,操作栏丢失

  •  0
  • m_jero  · 技术社区  · 7 年前

    我正在Xamarin Android中实现一个应用程序,其中包含一个页面,一旦你点击actionbar按钮,你就会得到一个包含工具栏的新对话框。

    简化的代码类似于:

    public class MyDialogFragment : MvxDialogFragment<MyDialogViewModel>
        {
            public MvxDialogFragment()
            {
            }
    
            public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
            {
                this.EnsureBindingContextIsSet(inflater);
    
                var view = this.BindingInflate(Resource.Layout.dialog_view, null);
    
                SetupToolbar(view);
    
                return view;
            }
    
            private void SetupToolbar(View view)
            {
                Dialog.RequestWindowFeature((int)WindowFeatures.NoTitle);
    
                Android.Support.V7.Widget.Toolbar toolbar = view.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.dialog_toolbar);
                ((AppCompatActivity)Activity).SetSupportActionBar(toolbar);
    
                Android.Support.V7.App.ActionBar actionBar = ((AppCompatActivity)Activity).SupportActionBar;
                actionBar.Title = null;
    
                HasOptionsMenu = true;
            }
    
            public override void OnCreateOptionsMenu(IMenu menu, MenuInflater inflater)
            {
                menu.Clear();
                inflater.Inflate(Resource.Menu.menu_dialog, menu);
                base.OnCreateOptionsMenu(menu, inflater);
            }
    
            public override bool OnOptionsItemSelected(IMenuItem item)
            {
                switch (item.ItemId)
                {
                    (...)
                }
            }
    
            public override void OnPrepareOptionsMenu(IMenu menu)
            {
              (...)
    
                base.OnPrepareOptionsMenu(menu);
            }
    

    主工作流工作正常,但在显示对话框时旋转屏幕会产生副作用。 如果这样做,父片段(承载对话框的片段)的actionbar按钮将消失,直到我重新创建视图(即:旋转)。

    有没有办法解决这个问题?我尝试了几种方法,比如在对话框关闭后使父菜单无效,但都没有成功。

    1 回复  |  直到 7 年前
        1
  •  0
  •   m_jero    7 年前

    在调查了一段时间后,我认为没有办法以“原生方式”同时制作两个动作条。

    最终,我的解决方案是通过第二个操作栏手动处理点击事件。

    public class MyDialogFragment : MvxDialogFragment<MyDialogViewModel>
        {
            public MvxDialogFragment()
            {
            }
    
            public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
            {
                this.EnsureBindingContextIsSet(inflater);
    
                var view = this.BindingInflate(Resource.Layout.dialog_view, null);
    
                SetupToolbar(view);
    
                return view;
            }
    
            private void SetupToolbar(View view)
            {
                Dialog.RequestWindowFeature((int)WindowFeatures.NoTitle);
    
            toolbar = view.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
            toolbar.Title = null;
    
            toolbar.InflateMenu(Resource.Menu.menu);
            toolbar.MenuItemClick += HandlerMenuItemClick;
    
            HasOptionsMenu = true;
            }
    
            public override bool HandlerMenuItemClick(object sender, Android.Support.V7.Widget.Toolbar.MenuItemClickEventArgs e)
            {
                switch (e.item.ItemId)
                {
                    (...)
                }
            }
    
    }
    

    希望它能帮助任何人