簡體   English   中英

Xamarin.Forms ABCA導航不適用於Android

[英]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 ,而Page3Page2都將消失在導航堆棧中。

缺點:Page1控件的狀態不會保留,您必須將其存儲在OnDisappearing事件的某些變量中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM