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 而没有清除其父项,我会收到一个错误,指出该页面不能已经有一个父项。
如有任何建议,我们将不胜感激。
使用 PopToRootAsync
、InsertPageBefore
和 PopAsync
。 (不显示任何状态保存):
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();
}
}
当我的 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 而没有清除其父项,我会收到一个错误,指出该页面不能已经有一个父项。
如有任何建议,我们将不胜感激。
使用 PopToRootAsync
、InsertPageBefore
和 PopAsync
。 (不显示任何状态保存):
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();
}
}