在带有工具栏的对话框中旋转后操作栏丢失

Actionbar lost after rotation in dialog with toolbar

我正在 Xamarin Android 中实现一个应用程序,其中包含一个页面,单击操作栏按钮后,您会看到一个包含工具栏的新对话框。

简化的代码是这样的:

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);
        }

主要工作流程它工作得很好,但是当我在显示对话框的同时旋转屏幕时会产生副作用。 如果我这样做,父片段(承载对话框的片段)的操作栏按钮会消失,直到我重新创建视图(即:旋转)。

关于如何解决这个问题有什么想法吗?我尝试了几种方法,例如在对话框关闭后使父菜单无效,但没有用。

经过一段时间调查问题后,我认为没有办法在 "native way".

中同时使用 2 个操作栏

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

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)
            {
                (...)
            }
        }

}

希望对大家有所帮助