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;
        }