【问题标题】:Xamarin.Forms A-B-C-A navigation not working for AndroidXamarin.Forms A-B-C-A 导航不适用于 Android
【发布时间】:2016-08-09 06:54:54
【问题描述】:

所以我创建了一个具有 3 个页面的 PCL 应用程序:第 1 页、第 2 页和第 3 页。每个页面都有 Title Page 1、Page 2 或 Page 3,并且我在每个页面上放置了一个按钮。然后我编写如下代码,在单击按钮时从第 1 页跳转到第 2 页,然后从第 2 页跳转到第 3 页。

在第 1 页上的按钮单击事件处理程序:

    await Navigation.PushAsync(new Page2());

在第 2 页上的按钮单击事件处理程序:

    await Navigation.PushAsync(new Page3());

然后在第 3 页中,我在代码下方使用的按钮单击事件处理程序通过转义第 2 页直接返回第 1 页。

    Navigation.RemovePage(Navigation.NavigationStack.ElementAt(1));
    await Navigation.PopAsync();

该代码在 iOS 上完美运行,但在 Android 上却不行。在 Android 上,它似乎导航回到第 1 页,但第 1 页视图未呈现,标题消失了,按钮消失了,因此视图基本上是空白的。我在 Nexus 4 API19 和 API 22 模拟器上进行了测试,结果是一样的。

有人可以帮忙吗?

【问题讨论】:

  • 我从 Xamarin 论坛获得了 hlep 以使用下面的方法直接返回根页面,该方法适用于我的场景 await Navigation.PopToRootAsync()。我要向 Xamarin 提出一个错误,让他们调查一下

标签: c# android xamarin navigation xamarin.forms


【解决方案1】:

如果您仅使用PushAsync 将页面推送到导航堆栈并且没有模式、选项卡式页面、主详细信息页面等,那么 Xamarin.Forms 直接支持的最佳解决方案是使用 @ 987654322@。它会从您的导航堆栈中弹出除 Root 之外的所有模式。但它只考虑最顶层的模态堆栈。

如果您的导航堆栈与模式、主详细信息等很复杂,那么我建议您直接使用MainPage 属性而不是按照您尝试执行的路线进行操作(即:使用导航服务) .

首先将App.cs中的MainPage设置为Page1

MainPage = new Navigationpage(Page1());

在你出现Page3之前,和你在活动中一样做

Page3 按钮事件中执行以下操作:

MainPage = new Navigationpage(Page1());

这将重置您的应用程序的MainPage,您的Page3Page2 都将从导航堆栈中消失。

缺点:Page1 的控件状态不会被保留,您必须将其存储在OnDisappearing 事件中的一些变量中。

【讨论】:

  • 感谢 Rohit,您的解决方案有效。而且我还收到了另一个使用 await Navigation.PopToRootAsync() 的建议,这对我来说是最好的选择。
  • 是的,你是对的,你也可以使用 PopToRootAsync,但唯一的问题是如果你也有模式堆栈。如果它像你描述的那样简单,那么它很好。谢谢你回来。我会将它添加到解决方案中。
猜你喜欢
  • 1970-01-01
  • 2011-08-01
  • 2014-03-29
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 2012-02-08
  • 2021-10-04
  • 1970-01-01
相关资源
最近更新 更多