C# 导航栏后退按钮覆盖
我需要重写back按钮。有OnBackButtonPressed()方法,但在android中只适用于硬件按钮!如何覆盖软件导航栏按钮?C# 导航栏后退按钮覆盖,c#,button,xamarin,xamarin.forms,xamarin.android,C#,Button,Xamarin,Xamarin.forms,Xamarin.android,我需要重写back按钮。有OnBackButtonPressed()方法,但在android中只适用于硬件按钮!如何覆盖软件导航栏按钮? 我使用的是同一个页面,我需要回到该页面的前一个状态(页面视图通过json文件更改而改变)您应该查看Xamarin的帮助页面,了解这一点,因为它列出了修复设计的许多原因,而不是以这种方式实现某些东西(例如使用PushModalAsync而不是PushAsync显示NavigationPage) 我还将在一个类似问题上发布一个链接,指向我的另一个答案,该问题讨论
我使用的是同一个页面,我需要回到该页面的前一个状态(页面视图通过json文件更改而改变)您应该查看Xamarin的帮助页面,了解这一点,因为它列出了修复设计的许多原因,而不是以这种方式实现某些东西(例如使用
PushModalAsync
而不是PushAsync
显示NavigationPage
)
我还将在一个类似问题上发布一个链接,指向我的另一个答案,该问题讨论了在用户单击“后退”按钮(如果他们选择这样做)后处理在页面上保存信息的另一种方法
但是Xamarin帮助站点答案的Android要点是在main活动中覆盖onoptionItemSelected
(如果您在导航中未使用MasterDetailPage
,则需要修改下面的var navPage…
代码):
您应该查看Xamarin的帮助页面,了解这一点,因为它列出了修复设计的许多原因,而不是以这种方式实现某项功能(例如使用PushModalAsync
而不是PushAsync
显示NavigationPage
)
我还将在一个类似问题上发布一个链接,指向我的另一个答案,该问题讨论了在用户单击“后退”按钮(如果他们选择这样做)后处理在页面上保存信息的另一种方法
但是Xamarin帮助站点答案的Android要点是在main活动中覆盖onoptionItemSelected
(如果您在导航中未使用MasterDetailPage
,则需要修改下面的var navPage…
代码):
public override bool OnOptionsItemSelected(IMenuItem item)
{
var app = Application.Current;
if (item.ItemId == 16908332) // This makes me feel dirty.
{
var navPage = ((app.MainPage.Navigation.ModalStack[0] as MasterDetailPage).Detail as NavigationPage);
if (app != null && navPage.Navigation.NavigationStack.Count > 0)
{
int index = navPage.Navigation.NavigationStack.Count - 1;
var currentPage = navPage.Navigation.NavigationStack[index];
var vm = currentPage.BindingContext as ViewModel;
if (vm != null)
{
var answer = vm.OnBackButtonPressed();
if (answer)
return true;
}
}
}
return base.OnOptionsItemSelected(item);
}