MvvmCross - 使用 DrawerLayout 时软后退按钮不起作用

MvvmCross - Soft back button does not work when using DrawerLayout

我在 MvvmCross 中克隆了 Playground Android 示例并默认设置了 DrawerLayout。

RegisterAppStart<SplitRootViewModel>();

从 SplitDetailView 导航到 SplitDetailNavView 时,导航栏上没有后退按钮。我不得不修改 SplitDetailNavView

中的 OnCreateView 函数
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
     base.OnCreateView(inflater, container, savedInstanceState);

     var view = this.BindingInflate(Resource.Layout.SplitDetailView, null);
_toolbar = view.FindViewById<Toolbar>(Resource.Id.toolbar);
     if (_toolbar != null) {
         BaseActivity.SetSupportActionBar(_toolbar);
         BaseActivity.SupportActionBar.SetDisplayHomeAsUpEnabled(true);
     }
     return view;
 }

然后,后退按钮出现但不起作用。硬按钮仍然按预期工作。

有什么建议吗? Github 对于任何对 Android 和 iOS 都感兴趣的 DrawerLayout https://github.com/closetoyou293/HambugerSample

感谢@Pietv,可以参考

在您的 BaseFragmentOnCreateView 方法中,添加:

 Toolbar.NavigationClick += Toolbar_NavigationClick;

Toolbar_NavigationClick:

private void Toolbar_NavigationClick(object sender, Android.Support.V7.Widget.Toolbar.NavigationClickEventArgs e)
{
    var mainActivity = Activity as MainActivity;
    if (!mainActivity.Title.Equals("Main Activity"))
    {
        mainActivity?.OnBackPressed();
    }
    else {
        mainActivity.ShowDrawLayout();
    }
}

MainActivity中添加ShowDrawLayout方法:

public void ShowDrawLayout() {
    DrawerLayout.OpenDrawer(GravityCompat.Start);
}

您的 BaseFragmentOnCreateView 方法应该是这样的:

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    var ignore = base.OnCreateView(inflater, container, savedInstanceState);

    var view = this.BindingInflate(FragmentId, null);

    Toolbar = view.FindViewById<Toolbar>(Resource.Id.toolbar);
    if (Toolbar != null)
    {
        var mainActivity = Activity as MainActivity;
        if (mainActivity == null) return view;

        mainActivity.SetSupportActionBar(Toolbar);
        mainActivity.SupportActionBar?.SetDisplayHomeAsUpEnabled(true);
        DrawerToggle = new MvxActionBarDrawerToggle(
            Activity,                               // host Activity
            mainActivity.DrawerLayout,  // DrawerLayout object
            Toolbar,                               // nav drawer icon to replace 'Up' caret
            Resource.String.drawer_open,            // "open drawer" description
            Resource.String.drawer_close            // "close drawer" description
        );

        if (ShowHamburgerMenu)
        {
            DrawerToggle.DrawerOpened += (sender, e) =>
            {
                mainActivity?.HideSoftKeyboard();
            };
            mainActivity.DrawerLayout.AddDrawerListener(DrawerToggle);
        }

        DrawerToggle.DrawerIndicatorEnabled = ShowHamburgerMenu;
        Toolbar.NavigationClick += Toolbar_NavigationClick;
    }
    return view;
}