2016-08-09 10 views
0

Also habe ich eine PCL-App mit 3 Seiten erstellt: Seite 1, Seite 2 und Seite 3. Jede Seite hat Titel Seite 1, Seite 2 oder Seite 3, und ich legte einen Knopf auf jede Seite. Dann schreibe ich Code wie unten, um von Seite 1 zu Seite 2 und dann von Seite 2 zu Seite 3 zu springen, wenn ich auf den Knopf klicke.Xamarin.Forms ABCA Navigation funktioniert nicht für Android

auf Seite 1 Schaltfläche Click-Ereignishandler:

await Navigation.PushAsync(new Page2()); 

Auf Seite 2 Schaltfläche Click-Ereignishandler:

await Navigation.PushAsync(new Page3()); 

dann in Seite 3 auf die Schaltfläche Click-Ereignishandler ich wieder unter dem Code nav verwenden auf Seite 1 direkt durch Austreten von Seite 2.

Navigation.RemovePage(Navigation.NavigationStack.ElementAt(1)); 
    await Navigation.PopAsync(); 

Der Code funktioniert perfekt auf iOS, aber nicht auf Android. Auf Android scheint es nav zurück zu Seite 1, aber Seite 1 Ansicht wird nicht gerendert, der Titel ist weg und die Schaltfläche ist weg, so dass die Ansicht im Grunde leer ist. Ich testete auf Nexus 4 API19 und API 22 Emulator und die Ergebnisse sind gleich.

Kann mir bitte jemand helfen?

+0

Ich habe Hlep von Xamarin Forum, um unterhalb der Methode zu verwenden, um direkt zur Root-Seite zurückzukehren, die in meinem Szenario 'aware Navigation.PopToRootAsync()' funktioniert. Ich werde einen Bug an Xamarin richten, damit sie sich das ansehen können. – Adam

Antwort

0

Wenn Sie nur die PushAsync verwenden, um Seiten in den Navigationsstapel zu schieben, und keine Modale, Registerseiten, Hauptdetailseite usw. vorhanden ist, wird die beste Lösung, die von Xamarin.Forms direkt unterstützt wird, await Navigation.PopToRootAsync() verwendet. Es würde alle Mods von deinem Navigations-Stack außer dem Root aufheben. Aber es berücksichtigt nur den obersten modalen Stapel.

Wenn Ihr Navigationsstapel komplex ist mit Modalen, Hauptdetail usw., dann würde ich vorschlagen, dass Sie es direkt unter Verwendung der MainPage Eigenschaft tun, als die Route zu gehen, die Sie versuchen zu tun (dh: Spielen mit Navigationsdienst).

Zuerst stellen Sie die MainPage in App.cs zu Page1

MainPage = new Navigationpage(Page1()); 

das gleiche tun, wie Sie in den Ereignissen zu tun, bis Sie die Page3

Im Page3 Tastenereignis gehen Sie wie folgt angezeigt:

MainPage = new Navigationpage(Page1()); 

Diese MainPage, Ihre Anwendung zurückgesetzt würden beide Ihre Page3 und Page2 wären vom Navigationsstapel verschwunden.

Nachteil: Der Status der Steuerelemente von Page1 wird nicht beibehalten, Sie müssen es in einigen Variablen im OnDisappearing Ereignis speichern.

+0

Danke Rohit, deine Lösung funktioniert. Und ich bekomme auch einen anderen Vorschlag, 'expire Navigation.PopToRootAsync()' zu verwenden, was für meinen Fall die beste Option ist. – Adam

+0

Ja, Sie haben Recht, Sie können auch PopToRootAsync verwenden, aber das einzige Problem wäre, wenn Sie auch modalen Stack haben. Wenn es so einfach ist wie das, was du beschrieben hast, dann ist es gut. Danke, dass du zurück bist. Ich werde es der Lösung hinzufügen. –

Verwandte Themen