[Android] Naviguer entre plusieurs pages et pouvoir revenir en arrière

[Android] Naviguer entre plusieurs pages et pouvoir revenir en arrière

L’un des premiers problèmes auquel j’ai été confronté en développant avec C# et Xamarin.Forms pour Android, ce fut pour naviguer entre les pages de mon programme. En effet, la méthode « classique » :

axait Navigation.PushAsync(new SecondePage());

ne semble pas être compatible avec Android. En effet, pour l’avoir essayé, j’ai du faire face à l’erreur suivante :

System.InvalidOperationException: 'PushAsync is not supported globally on Android, please use a NavigationPage.'

Du coup, j’ai dû contourner le problème avec une NavigationPage. Et c’est cette solution que je vous propose aujourd’hui.

Ma réflexion

J’ai souhaité une solution la plus simple possible, cross-platform et sans duplication de code. Aussi j’ai fait le choix de placer tout le code de ma navigation au sein de la classe App, au moyen de deux méthodes statiques. Chacune récupèrera l’instance de la classe App active et travaillera sur la NavigationPage de l’application.

Dans App.xaml.cs

Tout d’abord il faut modifier le type de la propriété MainPage de la classe App pour obtenir une NavigationPage :

MainPage = new NavigationPage(new MainPage());

Ensuite, on va créer une méthode statique Goto qui permettra de naviguer vers de nouvelles pages :

public static void Goto(Page Page)
{
    App CurrentApp = (App)App.Current;
    ((NavigationPage)CurrentApp.MainPage).PushAsync(Page, true);
}

Cette méthode récupère l’instance courante de la classe App dans la variable CurrentApp. Ensuite, en castant la propriété MainPage de la classe App on peut ajouter une page via un appel de PushAsync.

Et voilà, c’est fini, on a un système cross-platform (testé sur Android et sur Windows) qui permet de naviguer et de revenir en arrière très simplement en appelant App.Goto avec en paramètre l’instance de la nouvelle page.

Tags: , , , ,

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.