Xamarin 表单:停止页面可从硬件后退按钮访问
Xamarin forms : Stop page being accessible from hardware back button
我正在使用 xamarin forms prism。
快速信息:我有一个包含信息的页面,这个页面用户可以连同它的信息一起删除,这个页面是一个叫做保存对话的页面的一个实例,把每个实例想象成一个保存的电子邮件,你可以有很多一种类型,并且是动态制作的。
用户删除了一个保存的对话,这也删除了该页面的一个实例,在他们删除它之后,它每次都会将他们送回两个页面之一。但他们仍然可以使用硬件后退按钮 (Android) 访问这个已删除的已保存对话页面,方法是在他们被强制返回后直接单击它,或者稍微浏览一下应用程序,然后多次按下后退按钮.我会使用诸如...
protected override bool OnBackButtonPressed()
{
return true;
}
但我希望后退按钮适用于其他页面,并且只有在上一页是已保存对话页面的实例时才不起作用,无论它是否已被删除(我想我可以弄清楚它是否被我自己删除了,只需要检测硬件后退按钮将把用户发送到的页面,我想)。
这可能属于用户体验决策而非技术解决方案;但在我看来,您拥有的这个页面可能是成为 Modal Page.
的不错人选
离开模态页面(将其从堆栈中弹出)应该可以实现您的目标:无法导航“返回”该页面。
我所做的是将此代码添加到我不希望用户能够返回的所有页面。但如果前一页是下面显示的两个页面之一,它只会限制他们返回。如果不是,则后退按钮有效。
我注意到的是,当导航到页面(在我的例子中是对话和保存的对话)时,您必须确保将 modalNavigation 设置为 false,否则它们不会出现在导航堆栈中以供检查。
/// <summary>
/// Will override the harware back button.
/// </summary>
/// <returns> True if it can't go back false if it can.</returns>
protected override bool OnBackButtonPressed()
{
int count = this.Navigation.NavigationStack.Count;
bool shouldntGoBack = false;
if (count > 1)
{
string previousPage = this.Navigation.NavigationStack[count - 2].ToString();
if (previousPage == "NGT.Views.ConversationPage" || previousPage == "NGT.Views.SavedConversationPage")
{
shouldntGoBack = true;
}
}
return shouldntGoBack;
}
我正在使用 xamarin forms prism。
快速信息:我有一个包含信息的页面,这个页面用户可以连同它的信息一起删除,这个页面是一个叫做保存对话的页面的一个实例,把每个实例想象成一个保存的电子邮件,你可以有很多一种类型,并且是动态制作的。
用户删除了一个保存的对话,这也删除了该页面的一个实例,在他们删除它之后,它每次都会将他们送回两个页面之一。但他们仍然可以使用硬件后退按钮 (Android) 访问这个已删除的已保存对话页面,方法是在他们被强制返回后直接单击它,或者稍微浏览一下应用程序,然后多次按下后退按钮.我会使用诸如...
protected override bool OnBackButtonPressed()
{
return true;
}
但我希望后退按钮适用于其他页面,并且只有在上一页是已保存对话页面的实例时才不起作用,无论它是否已被删除(我想我可以弄清楚它是否被我自己删除了,只需要检测硬件后退按钮将把用户发送到的页面,我想)。
这可能属于用户体验决策而非技术解决方案;但在我看来,您拥有的这个页面可能是成为 Modal Page.
的不错人选离开模态页面(将其从堆栈中弹出)应该可以实现您的目标:无法导航“返回”该页面。
我所做的是将此代码添加到我不希望用户能够返回的所有页面。但如果前一页是下面显示的两个页面之一,它只会限制他们返回。如果不是,则后退按钮有效。
我注意到的是,当导航到页面(在我的例子中是对话和保存的对话)时,您必须确保将 modalNavigation 设置为 false,否则它们不会出现在导航堆栈中以供检查。
/// <summary>
/// Will override the harware back button.
/// </summary>
/// <returns> True if it can't go back false if it can.</returns>
protected override bool OnBackButtonPressed()
{
int count = this.Navigation.NavigationStack.Count;
bool shouldntGoBack = false;
if (count > 1)
{
string previousPage = this.Navigation.NavigationStack[count - 2].ToString();
if (previousPage == "NGT.Views.ConversationPage" || previousPage == "NGT.Views.SavedConversationPage")
{
shouldntGoBack = true;
}
}
return shouldntGoBack;
}