2016-08-09 56 views
0

因此,我創建了一個包含3頁的PCL應用程序:頁面1,頁面2和頁面3.每個頁面都有標題頁面1,頁面2或頁面3,每頁。然後我按下面的代碼編寫代碼,當點擊按鈕時,從第1頁跳轉到第2頁,然後從第2頁跳轉到第3頁。Xamarin.Forms ABCA導航不適用於Android

在第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仿真器上進行測試,結果相同。

有人可以幫忙嗎?

+0

我從Xamarin論壇獲得了hlep,使用下面的方法直接回到根頁面,它在我的場景'await Navigation.PopToRootAsync()'中工作。我將向Xamarin發起一個錯誤,讓他們看看這個 – Adam

回答

0

如果您只使用PushAsync將頁面推入導航堆棧並且沒有模式,選項卡式頁面,主細節頁面等,則Xamarin.Forms直接支持的最佳解決方案是使用await Navigation.PopToRootAsync()。它會彈出您的導航堆棧中除Root之外的所有模塊。但它只考慮最頂層的模式堆棧。

如果您的導航棧與模式,主要細節等複雜,那麼我建議您直接使用MainPage屬性來執行此操作,而不是使用您嘗試執行的路線(即:使用導航服務播放)。

起初設置App.cs的MainPagePage1

MainPage = new Navigationpage(Page1()); 

如您在事件做,直到你出現的Page3

Page3按鈕事件做同樣做到以下幾點:

MainPage = new Navigationpage(Page1()); 

這將重置您的應用程序的MainPage,無論您的Page3Page2將不在導航堆棧中。

缺點:Page1的控件狀態不會被保留,你必須將它存儲在OnDisappearing事件中的一些變量中。

+0

謝謝Rohit,您的解決方案可以工作。我還得到另一個使用'await Navigation.PopToRootAsync()'的建議,這對我來說是最好的選擇。 – Adam

+0

是的你是對的,你也可以使用PopToRootAsync,但唯一的問題是如果你有模態堆棧。如果它像你所描述的那麼簡單,那麼它就是好東西。感謝您回覆。我會將其添加到解決方案中。 –

相關問題