最近在做Xamarin.Forms的程序。在 Android App 中默认的是在堆栈Stack中只剩一层的时候,按back键会直接退出关闭App。
这样使用起来有误操作会不小心退出。
怎么避免呢?参考这篇文章我尝试了一个这样的方案:
一、先在最外层的Page中重写 OnBackButtonPressed 函数,如下:
protected override bool OnBackButtonPressed()
{
if(App.Instance.DoBack)
{
return base.OnBackButtonPressed();
}
Device.BeginInvokeOnMainThread(new Action(async () =>
{
if(await DisplayAlert("关闭应用", "您将要关闭本应用, 无法继续接收消息推送\r\n确定要关闭吗?", "关闭", "不关闭"))
{
AppManage.Instance.SaveBeforeExit();
System.Environment.Exit(0);
}
}));
return true;
}
二、在App.cs中实现DoBack的get方法
public bool DoBack
{
get
{
NavigationPage navi = null;
Console console = MainPage as Console;
var mainPage = console.Detail as MainPage;
if (mainPage != null)
{
navi = mainPage.CurrentPage as NavigationPage;
}
else
{
navi = console.Detail as NavigationPage;
}
if(navi != null)
{
if(navi.StackDepth > 1)
return true;
return false;
}
return true;
}
}
上面的Console类是我最外层的Page页面,这个页面是MasterDetailPage的子类。你应该修改为第一步中那个类。接下来就要定位到MasterDetailPage对象中Detail对象究竟是哪个页面。找到Detail中包含的NavigationPage,并验证NavigationPage中StackDepth究竟有几层。如果只有一层的话,就屏蔽这次的按键。
这样就做到了正常层叠的堆栈可以正常退出。当Pop到最后一层的时候,拦截不退出。
对,这个也是【石家庄正定县光辉钢化玻璃厂】的项目对应的Android App。
—————————————————————————————————————
❖ 石家庄正定光辉玻璃钢化厂 ❖
批发零售4mm-19mm各种规格钢化玻璃,橱柜扇、门扇钢化玻璃
加工定做钢化中空、夹胶玻璃、铜条玻璃、防弹玻璃,磨直边、斜边、异形、打眼等
黑、白、紫、金、各种镀膜、镜片、铜条玻璃、工艺玻璃
承接中小型项目
电话:0311-88015188
手机:13582191430(微信同号)
地址:河北石家庄市正定县107国道与常山路交叉口铁路西侧