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模拟器上进行了测试,结果相同。
有人能帮帮我吗?
如果您只使用PushAsync
将页面推送到导航堆栈中,并且没有模态,选项卡页面,主控详细页面等,那么Xamarin直接支持的最佳解决方案。形式是使用await Navigation.PopToRootAsync()
。它会弹出导航堆栈中的所有情态,除了根。但它只考虑最顶层的模态堆栈。
如果你的导航堆栈是复杂的模态,主细节等,那么我建议你直接使用MainPage
属性,而不是去你想要做的路线(即:玩导航服务)。
首先将App.cs中的MainPage
设置为Page1
MainPage = new Navigationpage(Page1());
与事件中相同,直到出现Page3
在Page3
按钮事件中执行以下操作:
MainPage = new Navigationpage(Page1());
这将重置你的应用程序的MainPage
,你的Page3
和Page2
都将从导航堆栈中消失。
缺点:Page1控件的状态不会被保留,您将不得不将其存储在OnDisappearing
事件的一些变量中。