【问题标题】:HelloWorld sample code not working on Android: Back button not visibleHelloWorld 示例代码无法在 Android 上运行:后退按钮不可见
【发布时间】:2017-08-06 01:14:34
【问题描述】:

我从 https://github.com/PrismLibrary/Prism/tree/master/Sandbox/Xamarin/HelloWorld

我在 Android 6 上测试过:

  1. 从示例代码运行应用程序(无修改),它显示 MainPage
  2. 从菜单中点击 ViewA,它会导航到 ViewA,但应用栏中没有返回按钮。

点击设备后退按钮有效,它导航回 MainPage。

我期望的行为也是在栏中看到后退按钮。

更新

我正在调试 Prism,我可以清楚地看到 Prism 的 PageNavigationService 只需调用 currentPage.Navigation.PushAsync(page, animated) 即可导航到 ViewA。 我可以看到 Xamarin Forms 的NavigationImpl 有两个页面NavigationStackMainPageViewA。所以MainPage 仍然存在于导航堆栈中,但由于某种原因,后退按钮不可见。

回答! @lowleetak 发现样本中某处有一个隐藏后退按钮的调用!

【问题讨论】:

    标签: xamarin.forms prism


    【解决方案1】:

    应用程序在 MasterDetail 页面中启动。 MasterPage 是菜单,DetailPage 最初是 MyNavigationPage/MainPage。

    当您从菜单中单击 ViewA 时,它将 DetailPage 从 MainPage 更改为 MyNavigationPage/ViewA。它是 DetailPage 导航堆栈中的根/初始页面。所以,没有显示返回按钮。

    【讨论】:

    • 所以navigationService 注入MyMasterDetailViewModel 是通过替换Details 来导航的?如何导航到 ViewA 以使后退按钮可见?
    • 我正在调试 Prism,但我认为您所说的不正确。我可以清楚地看到 Prism 的 PageNavigationService 只需调用 currentPage.Navigation.PushAsync(page, animated) 即可导航到 ViewA。我可以看到 Xamarin Forms 的 INavigationNavigationStack 两个页面,MainPage 和 ViewA。所以 MainPage 仍然在导航堆栈中。为什么不显示返回按钮?
    • 在 MyMasterDetailViewModel 中调用 navigate 会改变详情页。我找不到这方面的文档。但布赖恩拉古纳斯在stackoverflow.com/questions/35604135/… 中提到了这一点
    • 如果你想用返回按钮调用 ViewA,那么你应该在 MainPageViewModel 中调用导航
    • 显然在 ViewA.xaml.cs 中有隐藏后退按钮的代码。第 13 行:NavigationPage.SetHasBackButton(this, false)。此外,如果从左侧菜单触发,我已经检查了 ViewA 中的 NavigationStack。你是正确的 MainPage 仍然在堆栈中,我也很困惑。我想如果我们真的要清空堆栈,我们应该在 MyMasterDetailViewModel 中使用绝对导航 URL。
    猜你喜欢
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多