Xamarin.UWP中CarouselPage的OnAppearing()方法异常问题咨询
相关代码实现
App.xaml.cs
MainPage = new NavigationPage(new Home());
Home.xaml.cs
public Home() { Children.Insert(0,new CarPage1()); Children.Insert(1,new CarPage2()); Children.Insert(2,new CarPage3()); CurrentPage = Children[1]; }
CarPage1.xaml.cs
protected override void OnAppearing() { base.OnAppearing(); DisplayAlert("Page1", null, "ok"); }
CarPage2.xaml.cs
protected override void OnAppearing() { base.OnAppearing(); DisplayAlert("Page2", null, "ok"); }
CarPage3.xaml.cs
protected override void OnAppearing() { base.OnAppearing(); DisplayAlert("Page3", null, "ok"); }
问题描述
在UWP平台运行时,启动后显示Page2弹窗;点击弹窗的“ok”按钮后,弹出了Page1的弹窗;点击UWP返回按钮切换到Page1时,未触发Page1的弹窗。但相同代码在Xamarin.Android平台运行正常,请问该异常的原因是什么?
问题原因
这是UWP与Android平台对TabbedPage(代码中Home应为继承自该类)的页面生命周期逻辑差异导致的:
启动后的弹窗顺序异常
UWP平台的TabbedPage在初始化时,会预加载所有已添加的子页面,同时触发它们的OnAppearing方法。虽然你设置CurrentPage = Children[1]让CarPage2优先显示,但CarPage1的OnAppearing已经执行,其弹窗会在CarPage2的弹窗关闭后触发。而Android平台只会加载当前激活的Tab页面,不会预加载其他子页面,因此不会出现这个问题。切换到Page1时不触发弹窗
UWP中,已预加载完成的Tab页面,在切换回来时不会重复触发OnAppearing方法——因为该方法在页面初始化时已经执行过一次。而Android平台切换Tab时,会重新触发目标页面的OnAppearing,所以能正常弹出提示。
本质是两个平台对Tab页面的加载策略不同:UWP是预加载所有子页面,Android是按需加载当前激活页面,这种差异引发了上述异常表现。
内容的提问来源于stack exchange,提问作者jjctw1969
相关产品推荐
相关产品推荐

