【问题标题】:Xamarin Prism Android won't lose TabbedPage or change NavigationPageXamarin Prism Android 不会丢失 TabbedPage 或更改 NavigationPage
【发布时间】:2017-03-29 16:17:44
【问题描述】:

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

我已经设置了sample project available here

此应用程序由三个页面组成,它们嵌套在NavigationPageTabbedPage(APage、BPage 和 CPage)中,第四个页面应该丢失TabbedPage 并保留NavigationPage(B1Page 可用通过 BPage)。

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

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。这仍然有导航栏(带有“保存”按钮而不是“添加”),但没有标签栏。

m_navigationService.NavigateAsync("NavigationPage/LayoutTabbedPage/BPage/B1Page");

但在Android B1Page 上,标签栏和原始导航栏一样保留(使用添加按钮而不是保存)。

我的导航有什么问题导致这些不一致吗?

【问题讨论】:

    标签: xamarin.android xamarin.forms prism


    【解决方案1】:

    是的,您的导航有问题。首先,如果要在 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");。

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

    【讨论】:

    • 我不想在选项卡中导航,因此将导航更正为相对并使用“usemodalnavigation”参数正是我所需要的。谢谢你,感谢你在 Prism 上所做的所有工作!
    猜你喜欢
    • 2021-03-25
    • 2018-04-11
    • 1970-01-01
    • 2017-09-14
    • 2019-07-07
    • 1970-01-01
    • 2020-10-09
    • 2021-03-21
    • 1970-01-01
    相关资源
    最近更新 更多