我想通过按下android上的xamarin表单中的硬件后退按钮来阻止关闭应用程序 .
我想,你可以使用应用程序中的硬件后退按钮(工作正常)进行导航,但是当达到导航堆栈中的第一页时,不想退出 .
我试图在xamarin表单中使用OnSleep事件,但在这里我无法取消退出 .
我也尝试在android中捕获后退按钮:
public override void OnBackPressed()
{
//base.OnBackPressed();
}
但是当使用xamarin表单时,我不知道当前显示的是哪个页面 . 所以我不知道是否允许导航
6 回答
它适用于评估NavigationStack(当您使用NavigationPage时) .
在我的Activity中,我重写了OnBackPressed
在我的xamarin表单应用程序(App.Instance(它是一个单例))中,我将像这样评估当前页面的NavigationStack .
当NavigationStack中只剩下一页时,我不会调用base.OnBackPressed,这样我就不会关闭App了 .
![测试]
这就是Xamarin Forms MasterDetail页面场景代码的样子......
只需在页面中给你一个空白的电话,你想要阻止,比如
这将阻止XF-Droid中的后退按钮 .
这是一个适用于Android的解决方案 .
在应用程序类中引入一个计数器,并使用每个
OnStart
递增计数器,并在计数器为 1 时以每个OnStop
递减计数器,您将知道您处于上次活动中 .不用说,使用基本活动实现,这样您就不必复制过去的样板代码 .
提出的解决方案可以很好地工作,但我不喜欢“静态属性暴露”来解决问题 . 更重要的是,我不喜欢使用“属性作为方法”解决方案,特别是涉及到很多逻辑时 .
这里的主要问题是我们如何处理来自Xamarin.Forms.Application类的OnBackButton()方法 .
那么以更优雅的方式做同样的事情呢?
首先,您需要像这样扩展Xamarin.Forms.Application类:
您的App实现现在将使用此类作为基类 . 记得相应地修改你的xaml和你的xaml.cs:
在App.cs实现中,您现在可以覆盖OnBackButton()方法 .
然后你需要改变一下你的Activity类实现 .
扩展Chris的答案,因为现在没有
App.Instance
,并且无法在平台代码中以静态方式访问App .1. App.xaml.cs
2.MainActivity.cs under Android project
App app;
119101 _119101_更改
LoadApplication(new App());
至app = new App();
LoadApplication(app);
OnBackPressed()