Xamarin Prism Android不会失去TabbedPage或更改NavigationPage

时间:2017-03-29 16:17:44

标签: xamarin.android xamarin.forms prism

我们有一个项目使用NavigationPageTabbedPage按预期在iOS中运行,但不使用Android(Xamarin Forms(2.3.3.193)和Prism(6.3.0))。

我已经设置了sample project available here

此应用程序包含三个嵌套在NavigationPageTabbedPage(APage,BPage和CPage)和第四个页面的页面,这些页面应该丢失TabbedPage并保留{ {1}}(B1页可通过BPage获得)。

NavigationPage

Opening APage with navigation and tab bar on iOSlooks fine on Android

BPage has an 'Add' button on the navigation bar也是looks fine on Android

点击'添加'应该打开B1Page。这仍然有导航栏(使用'保存'按钮而不是'添加')但没有标签栏。

NavigationService.NavigateAsync("NavigationPage/LayoutTabbedPage/APage");

但是在Android B1Page上标签栏仍然保留,原始导航栏也是如此(使用“添加”按钮而不是“保存”)。

我做导航是否有问题导致这些不一致?

1 个答案:

答案 0 :(得分:2)

是的,您的导航存在问题。首先,如果要在TabbedPage中导航并保留选项卡,则需要将Tab包装在NavigationPage中,而不是NavigationPage中的TabbedPage。像这样:

<NavigationPage Title="B"> <x:Arguments> <local:BPage /> </x:Arguments> </NavigationPage>

这将允许您在实际标签中导航。

如果这不是您想要做的,那么将tabbedPage保存在导航页面中,然后当您导航到B1Page时,使用'NavigateAsync(“B1Page”,usemodalNavigation:false)`强制执行异步导航调用。这会使您退出选项卡页面,但会使用后退箭头和工具栏项目进入导航页面。

其次,你的导航Uri是一团糟。 Prism中的导航与你所称的相关。

当您拨打此电话m_navigationService.NavigateAsync("NavigationPage/LayoutTabbedPage/BPage/B1Page");时,您将再次将所有这些页面推送到导航堆栈。如果您点击Android上的后退按钮,您将看到我的意思。

您所要做的就是从BPageViewModel调用NavigateAsync(“B1Page”);.

这应该让你指出正确的方向。