Xamarin的.表单A-B-C-A导航不适用于Android

本文关键字:不适用 适用于 Android 导航 A-B-C-A 表单 Xamarin | 更新日期: 2023-09-27 18:01:38

所以我创建了一个有3页的PCL应用程序:第1页,第2页和第3页。每页都有标题页1,页2或页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的.表单A-B-C-A导航不适用于Android

如果您只使用PushAsync将页面推送到导航堆栈中,并且没有模态,选项卡页面,主控详细页面等,那么Xamarin直接支持的最佳解决方案。形式是使用await Navigation.PopToRootAsync()。它会弹出导航堆栈中的所有情态,除了根。但它只考虑最顶层的模态堆栈。

如果你的导航堆栈是复杂的模态,主细节等,那么我建议你直接使用MainPage属性,而不是去你想要做的路线(即:玩导航服务)。

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

MainPage = new Navigationpage(Page1());

与事件中相同,直到出现Page3

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

MainPage = new Navigationpage(Page1());

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

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