阻止用户返回上一个活动
Posted
技术标签:
【中文标题】阻止用户返回上一个活动【英文标题】:Prevent user from returning to last activity 【发布时间】:2016-03-10 13:32:37 【问题描述】:我正在开发一个 Xamarin.Forms 项目,并在我的 PCL 中创建了名为“Login.xaml”的启动页面。在此页面上,用户必须填写他们的凭据并将其发送到 WebAPI。当 API 返回“1”/true 时,它会打开一个名为“Home.xaml”的新页面。
如何防止用户在按下手机上的返回按钮时返回登录页面?即:用户在第一页登录,webapi 对其进行验证并返回一个“1”,因此新页面(“主页”)被打开,但是当用户按下返回按钮时,它返回到登录屏幕。在应用关闭之前,这应该是不可能的。
【问题讨论】:
【参考方案1】:您可以在推送Home.xaml
时从导航堆栈中删除登录页面:
await Navigation.PushAsync(new Home()); // or whatever your page is called
Navigation.RemovePage(this);
这样你的用户进入主页后就没有什么可返回的了。
为此,您的登录页面必须是NavigationPage
。为此,您必须使用 NavigationPage
ctor 包装它:
// this goes into your App.cs where you enter your app:
public App()
MainPage = new NavigationPage(new Login()); // or whatever your login page is called
我建议你看看文档:Introduction to Xamarin Forms - Navigation
【讨论】:
感谢您的回答,但我收到以下错误:System.InvalidOperationException: RemovePage is not supported globally on android, please use a NavigationPage.
我会澄清更多。使用await Navigation.PushAsync(new Home()); Navigation.RemovePage(this);
时出现以下错误:PushAsync is not supported globally on Android, please use a NavigationPage.
但使用PushModalAsync
时出现System.InvalidOperationException: RemovePage is not supported globally on Android, please use a NavigationPage.
我自己已经弄清楚了,标记为答案。谢谢!【参考方案2】:
对我来说,打电话给RemovePage()
给我带来了各种各样的问题。
我必须做的是改变我的想法。如果您使用Pop
而不是Push
,那么您实际上是在永久删除该页面。那么你需要做什么才能做 Pop 而不是 Push 呢?先在当前页之前插入下一页,再Pop:
var newRootPage = new NewRootPage();
this.Navigation.InsertPageBefore(newRootPage, this);
await this.Navigation.PopAsync();
注意:要使其正常工作,您还需要将初始根页面包装在 NavigationPage 中,就像@germi 在他的回答的最后一部分中所说:
// this goes into your App.cs where you enter your app:
public App()
// or whatever your login page is called
MainPage = new NavigationPage(new Login());
PS:FWIW this was my fix 在我的 F# 开源项目中。
【讨论】:
以上是关于阻止用户返回上一个活动的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 总是返回“由于异常活动,我们已阻止来自此设备的所有请求。请稍后再试。”