Xamarin Forms OnResume 特殊处理

Xamarin Forms OnResume special processing

当我的 Xamarin Forms 跨平台应用程序恢复时,我想拦截导航并转移到加载页面,我要检查某些数据是否已更改等。执行此处理后,如果没有任何更改,我想恢复导航到 onresume 会带我去的原始页面。

因此,首先我保存了一个页面实例,用于检查 app.xaml.cs 文件中变量中数据的变化。当我的应用程序启动时,我创建了一个我想要的页面实例并导航到它。下面是我的 app.xaml.cs 文件中的代码:

            gobj_BaseLoadingPage = new baseloadingpage();

            if (Application.Current.MainPage == null)
            {
                Application.Current.MainPage = new NavigationPage(gobj_BaseLoadingPage);
            }

所以现在在简历中,我想返回到此加载页面。我已经尝试了下面代码的许多变体,但我似乎无法让它工作。使用下面的代码,永远不会显示 by base loading 页面,应用程序只是返回到暂停时所在的页面。

        App.Current.MainPage = (Page)gobj_BaseLoadingPage.Parent;
        gobj_BaseLoadingPage.Parent = null;
        Application.Current.MainPage.Navigation.PushAsync(gobj_BaseLoadingPage);

如果我只是对页面执行 pushasync 而没有清除其父项,我会收到一个错误,指出该页面不能已经有一个父项。

如有任何建议,我们将不胜感激。

使用 PopToRootAsyncInsertPageBeforePopAsync。 (不显示任何状态保存):

Page rootPage;

public App()
{
  InitializeComponent();

  rootPage = new OriginalRootPage();
  MainPage = new NavigationPage(rootPage);
}

protected override async void OnResume()
{
  // Handle when your app resumes
  Debug.WriteLine("Resume");

  var nav = MainPage.Navigation;

  // Pops all but the root Page off the navigation stack, 
  // making the root page of the application the active page.
  await nav.PopToRootAsync();

  if (!(nav.NavigationStack.First() is NewRootPage))
  {
    // Insert a page on the navigation stack before the original rootPage
    var newRootPage = new NewRootPage();
    nav.InsertPageBefore(newRootPage, rootPage);

    // Pops the original rootPage, making the newRootPage the only page on the stack
    await nav.PopAsync();
  }
}