[英]Xamarin.Forms A-B-C-A navigation not working for Android
因此,我創建了一個PCL應用程序,該應用程序包含3個頁面:第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.Forms直接支持的最佳解決方案是使用await Navigation.PopToRootAsync()
。 它將從導航堆棧中彈出除“根”以外的所有模態。 但這僅考慮了最頂層的模態堆棧。
如果萬一您的導航堆棧包含模態,主要細節等,那么我建議您直接使用MainPage
屬性來執行此操作,而不是嘗試嘗試執行的路線(即:使用導航服務)。
首先,將App.cs中的MainPage
設置為Page1
MainPage = new Navigationpage(Page1());
進行與事件中相同的操作,直到出現Page3
在Page3
按鈕事件中,執行以下操作:
MainPage = new Navigationpage(Page1());
這將重置應用程序的MainPage
,而Page3
和Page2
都將消失在導航堆棧中。
缺點:Page1控件的狀態不會保留,您必須將其存儲在OnDisappearing
事件的某些變量中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.