Android 全球不支持推送异步,请使用 NavigationPage

Posted

技术标签:

【中文标题】Android 全球不支持推送异步,请使用 NavigationPage【英文标题】:Push Async is not supported globally on Android, please use a NavigationPage 【发布时间】:2020-05-04 20:48:59 【问题描述】:

App.xaml.cs 我有以下代码:

MainPage = new LoginPage();  //LoginPage is ContentPage

当用户点击该页面上的Button 时,会调用MasterDetailPage 类型的MasterDetailPage。这将是我真正的主页,用户将从那里导航到其他页面。我用navigation bar 将其视为我的应用程序的中心位置。

Application.Current.MainPage = new MasterDetailPage();

ctorMasterDetailPage中,我设置了默认打开的页面:

Detail = new NavigationPage(new ClientsPage());

现在,从这里我有一个Button 可以导航到另一个ContentPage,所以当我单击Button 时,会执行此行:

await Application.Current.MainPage.Navigation.PushAsync(new ClientModifyPage(_selectedClient));

但是我收到以下错误:

android 全球不支持 PushAsync,请使用 NavigationPage

怎么了?

【问题讨论】:

MainPage 是 MD Page,而不是 N. Page。 @SushiHangover 不确定您是否理解正确,但我将行更改为: Application.Current.MainPage = new NavigationPage(new MasterDetailPage());但是在更改之后,我在顶部看到重复的导航,请看:drive.google.com/open?id=114PcUByMl3SuhP_MbIih9eAr3rJMnQJh 【参考方案1】:

等待 Application.Current.MainPage.Navigation.PushAsync(new ClientModifyPage(_selectedClient));

正如 SushiHangover 所说,这将是一个预期的结果,因为 Application.Current.MainPage 是 MasterDetailPage ,它不在 NavigationPage 中。

你应该在详情页调用PushAsync方法。

 await((MasterDetailPage)App.Current.MainPage).Detail.Navigation.PushAsync(new ClientModifyPage(_selectedClient));

【讨论】:

在你回答之前我解决了如下操作我添加了新的导航如下:Application.Current.MainPage = new NavigationPage(new MasterDetailPage());然后我添加了这一行: NavigationPage.SetHasNavigationBar(this, false);一次之后 Detail = new NavigationPage(new ClientsPage());现在它起作用了,你怎么看?这条线保持原样:await _pageService.PushAsync(new ClientModifyPage(_selectedClient)); 这不是最好的解决方案,你可以试试我的答案(不需要将 MasterDetailPage 设置为 NavigationPage)。 我照你说的做了,但我得到了和以前完全相同的错误:System.InvalidOperationException: 'PushAsync 在 Android 上不受全球支持,请使用 NavigationPage。' 你能分享一个样本,以便我可以在我身边测试它 将很难提取;/它在您粘贴的行上。我可以继续隐藏 masterdetail 导航栏,除非您说其他要测试的内容【参考方案2】:

放在 app.cs 页面中的行下方

MainPage = new NavigationPage(new LoginPage());

而不是

MainPage = new LoginPage();

并且不需要在其他页面中使用NavigationPage。当我们在应用程序中第一次重定向页面时应该使用NavigationPage。 这里 MainPage 是根页面。我们必须使用 NavigationPage 为 MainPage 分配一个页面(LoginPage)。

【讨论】:

以上是关于Android 全球不支持推送异步,请使用 NavigationPage的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms - Android 全球不支持 PushAsync,请使用 NavigationPage

iOS 全球不支持 PushAsync,请使用 NavigationPage

异步任务推送的实践

如何向 Apple 和 Android 发送推送通知?

如何在没有导航栏的 View Controller 内使用 Nav 推送 UIViewController

使用 NavigationPage 时获取“iOS 上不支持全球范围内的 PushAsync ...”