Xamarin Prism Android 不会丢失 TabbedPage 或更改 NavigationPage
Xamarin Prism Android won't lose TabbedPage or change NavigationPage
我们有一个使用 NavigationPage
和 TabbedPage
的项目在 iOS 中按预期工作但不是 Android(Xamarin Forms (2.3.3.193) with Prism (6.3 .0)).
我设置了 sample project available here。
此应用程序由嵌套在 NavigationPage
和 TabbedPage
中的三个页面(APage、BPage 和 CPage)和第四个页面组成,该页面应丢失 TabbedPage
并保留a NavigationPage
(B1Page 可通过 BPage 访问)。
NavigationService.NavigateAsync("NavigationPage/LayoutTabbedPage/APage");
Opening APage with navigation and tab bar on iOS and looks fine on Android
BPage has an 'Add' button on the navigation bar which also looks fine on Android
单击 'Add' 应该会打开 B1Page。这仍然有导航栏(带有 'Save' 按钮而不是 'Add')但没有标签栏。
m_navigationService.NavigateAsync("NavigationPage/LayoutTabbedPage/BPage/B1Page");
但在 Android B1Page 上,选项卡栏和原始导航栏一样(使用“添加”按钮而不是“保存”)。
我在导航方面做错了什么导致这些不一致吗?
是的,您的导航有问题。首先,如果您想在 TabbedPage 中导航并保留选项卡,则需要将 Tab 包装在 NavigationPage 中,而不是将 TabbedPage 包装在 NavigationPage 中。像这样:
<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");。
这应该会让您指明正确的方向。
我们有一个使用 NavigationPage
和 TabbedPage
的项目在 iOS 中按预期工作但不是 Android(Xamarin Forms (2.3.3.193) with Prism (6.3 .0)).
我设置了 sample project available here。
此应用程序由嵌套在 NavigationPage
和 TabbedPage
中的三个页面(APage、BPage 和 CPage)和第四个页面组成,该页面应丢失 TabbedPage
并保留a NavigationPage
(B1Page 可通过 BPage 访问)。
NavigationService.NavigateAsync("NavigationPage/LayoutTabbedPage/APage");
Opening APage with navigation and tab bar on iOS and looks fine on Android
BPage has an 'Add' button on the navigation bar which also looks fine on Android
单击 'Add' 应该会打开 B1Page。这仍然有导航栏(带有 'Save' 按钮而不是 'Add')但没有标签栏。
m_navigationService.NavigateAsync("NavigationPage/LayoutTabbedPage/BPage/B1Page");
但在 Android B1Page 上,选项卡栏和原始导航栏一样(使用“添加”按钮而不是“保存”)。
我在导航方面做错了什么导致这些不一致吗?
是的,您的导航有问题。首先,如果您想在 TabbedPage 中导航并保留选项卡,则需要将 Tab 包装在 NavigationPage 中,而不是将 TabbedPage 包装在 NavigationPage 中。像这样:
<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");。
这应该会让您指明正确的方向。