为什么onappear不是每次都在Android中着火



我有一个Xamarin项目。当我在UWP中运行OnAppearing时,首先触发一次,然后加载登录页面。成功登录后,我的主页再次触发OnAppearing,我将数据加载到我的ViewModel中。

然而,如果我在Android中运行项目,OnAppearing只触发一次-当主页初始加载时。

protected override async void OnAppearing()
{
if (!App.IsUserLoggedIn)
{
await App.NavigationService.NavigateModalAsync(PageNames.LoginPage, false);
}
else
{
((SchedulerViewModel)Schedule.BindingContext).LoadData();
}
base.OnAppearing();
}

为什么Android只启动一次?还是UWP行为不端的一方?

注意:NavigationService不是一个标准的Xamarin Forms类。我认为它是建立在Page.Navigation.PushModalAsync和PopModalAsync之上的。


这是Android上Modal Stack的文档行为:

从Modal Stack弹出页面:

当PopModalAsync被调用时,会发生以下事件:…被返回的页面有它的onappear覆盖调用,提供底层平台不是Android。

注意:这似乎取决于Android的API版本。我刚刚在API 30上测试了它,Android做了弹出模态页面时触发onappear


代替onappear中的代码,我会这样解决它:

App.xaml.cs中,而不是:

MainPage = new MainPage();

:

if (!App.IsUserLoggedIn)
MainPage = new LoginPage();
else
MainPage = new MainPage();

然后当LoginPage完成,而不是弹出模式,做:

Application.Current.MainPage = new MainPage();

注意:如果这些是NavigationPage或AppShell中的页面,请根据需要调整。

最新更新