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,可以参考。
在您的 BaseFragment
的 OnCreateView
方法中,添加:
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);
}
您的 BaseFragment
的 OnCreateView
方法应该是这样的:
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;
}
我在 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,可以参考
在您的 BaseFragment
的 OnCreateView
方法中,添加:
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);
}
您的 BaseFragment
的 OnCreateView
方法应该是这样的:
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;
}