【问题标题】:Navigate to default page from OnResume()从 OnResume() 导航到默认页面
【发布时间】:2017-09-01 14:29:01
【问题描述】:

在 Xamarin 表单中,OnResume 事件处理程序位于不是 NavigationPage 的 Application 类上,因此您无法在 OnResume 中进行任何导航。当我的应用程序恢复时,如果它已经睡了超过 30 分钟,我希望它回到它的主页,而不是恢复到它进入睡眠的页面。我在 OnResume 中有 30 分钟的陷阱,但我无法进行导航。任何人都可以建议这样做的方法吗?

【问题讨论】:

  • 你有sn-p码吗

标签: xamarin xamarin.forms onresume


【解决方案1】:

默认情况下,在表单应用程序中,您存储的是 MainPage,在这种情况下应该是 NavigationPage。

public class App : Application
{
    public App ()
    {
        // The root page of your application
        MainPage = new NavigationPage {

因此您可以使用它来获取Navigation 对象。

protected override async void OnResume ()
{
    var nav = MainPage.Navigation;

    // you may want to clear the stack (history)
    await nav.PopToRootAsync (true);

    // then open the needed page (I'm guessing a login page)
    await nav.PushAsync(new LoginPage());
}

【讨论】:

  • 太好了,谢谢。我没有意识到我可以访问 MainPage 对象。您已深思熟虑地建议清除堆栈历史记录,但是当我尝试此操作时,出现语法错误:ElementAt 不是 NavigationStack 上的方法。你真的试过了吗?
  • 您需要添加 using System.Linq; Xamarin Studio 并不总是帮助解决缺少的 Linq 库,因为它们可能是扩展方法,但仍然很烦人 ;-)
【解决方案2】:

尝试将您的 OnResume 方法更新为如下所示:

protected async override void OnResume ()
{
    await MainPage.Navigation.PopToRootAsync (true);
}

【讨论】:

  • 不错的简单答案。非常感谢。我会认为它是正确的,但 Benoit 最先到达那里。
  • 好多了,谢谢,我更新了答案供参考
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多