操作栏在与工具栏对话框中旋转后丢失

时间:2018-02-15 16:12:13

标签: android xamarin mvvmcross android-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);
        }

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

有关如何解决此问题的任何想法?在对话框关闭后,我尝试了几个使父菜单无效的事情,但它没有用。

1 个答案:

答案 0 :(得分:0)

经过一段时间调查问题,我认为没有办法以“本地方式”同时制作2个动作栏。

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

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://me@bitbucket.org/myRepo.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

希望它可以帮助任何人