Xamarin.Forms页面导航问题求助:TabbedPage内页面点击按钮跳转报错“PushAsync is not supported globally on Android”
解决Xamarin.Forms中Android端PushAsync报错的问题
我刚遇到过一模一样的问题,来给你拆解下原因和解决方案:
首先,先看你的错误根源:
你代码里两次给MainPage赋值,第二次的TabbedPageMain完全覆盖了之前的NavigationPage设置,而且你的listofinterest页面如果是TabbedPageMain的子页面,它根本没被包裹在NavigationPage的导航栈里——这就是Android报错的核心原因:只有处于NavigationPage上下文里的页面,才能调用PushAsync方法。
接下来分你提到的两个场景给出具体修复方案:
场景1:从普通页面导航到另一个页面
第一步:修正根页面初始化逻辑
删掉重复的MainPage赋值,如果你要以TabbedPage作为主界面,并且其中的子页面需要导航功能,必须把每个需要导航的Tab子页面包裹在NavigationPage中,示例代码:
// 正确的根页面设置:TabbedPage作为主容器,需要导航的子页面套NavigationPage MainPage = new TabbedPageMain() { BarBackgroundColor = Color.FromHex("#F8F8F8"), Children = { // 给需要导航的listofinterest套上NavigationPage new NavigationPage(new listofinterest()) { Title = "兴趣列表" }, // 其他Tab页面:不需要导航的可以直接加,需要的也套NavigationPage new YourOtherTabPage() { Title = "我的" } } };
第二步:修正导航代码
在listofinterest的Add方法里,不需要再给目标页面套NavigationPage(否则会出现嵌套导航栏),直接推送即可:
private async void Add(object sender, EventArgs e) { // 直接推送目标页面,不需要额外包裹NavigationPage await Navigation.PushAsync(new MainPage()); }
场景2:TabbedPage中非主页页面的导航
和上面逻辑一致,只要把那个非主页的Tab页面也包裹在NavigationPage里,比如:
// 在TabbedPage的Children里给非主页页面套NavigationPage new NavigationPage(new NonHomeTabPage()) { Title = "非主页" }
之后在NonHomeTabPage里调用Navigation.PushAsync()就完全正常了。
额外注意事项
- 绝对不要重复给
MainPage赋值,最后一次赋值会完全覆盖之前的设置,你之前的NavigationPage初始化等于白写了。 - 如果你的目标页面本身是一个
TabbedPage,推送时不要套NavigationPage,否则会出现两层导航栏,体验很差。 - 如果你需要从全局(比如App类里)导航,可以用
Application.Current.MainPage.Navigation.PushAsync(),但前提是MainPage本身是NavigationPage或者包含NavigationPage的容器。
内容的提问来源于stack exchange,提问作者Miled Bilel
相关产品推荐
相关产品推荐

