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();
在ctor
的MasterDetailPage中,我设置了默认打开的页面:
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