Xamarin Android – Empêcher la fermeture intempestive d’une application

xamarin_logo

Dans une application mobile, la touche « Retour » provoque par défaut la fermeture de l’écran en cours. Si on se trouve sur l’écran principal, elle provoque la fermeture de l’application.

Au cours de la navigation, il arrive fréquemment d’effleurer cette touche « Retour », et de fermer l’application par erreur.

Nous allons voir dans cet article comment redéfinir l’action associée par défaut à cette touche, pour afficher un message de confirmation avant fermeture.

Rappel sur la classe Activity

D'une manière générale, un 'Activity' désigne un écran dans une application Android. Pour créer un nouvel écran, il suffit d'ajouter une classe dérivant de la classe de base 'Activity' :

public class MonEcran : Activity

Par définition, ‘MonEcran’ hérite alors des méthodes de la classe 'Activity', parmi lesquelles :

     protected void onCreate(Bundle savedInstanceState);
     protected void onStart();
     protected void onRestart();
     protected void onResume();
     protected void onPause();
     protected void onStop();
     protected void onDestroy();
     etc...

Au sein de nos écrans, ces méthodes peuvent être surchargées. C’est ce que l’on fait habituellement avec la méthode "OnCreate", qui permet de gérer le chargement de l’écran.

Surcharge de la méthode OnBackPressed

Dans le cas de la touche « Retour », la méthode qui nous intéresse est la méthode « OnBackPressed ».

La surcharger au sein de notre écran principal permettra de modifier son comportement :

public class MonEcran : Activity
{
     public override void OnBackPressed() {
          //Code déclenché lorsque l’utilisateur
          //presse la touche retour
     }
}

Ajout d’un message d’alerte

Au sein de cette méthode OnBackPressed, nous allons créer et afficher un message d’alerte demandant à l’utilisateur s’il souhaite vraiment quitter l’application.

On construit une "AlertDialog" en précisant quelles actions réaliser lorsque l'utilisateur clique sur les différents choix :

  • Si l’utilisateur répond « Oui » : la méthode Finish() fermera l’écran, et donc l’application si c’était notre écran principal.
  • Si l’utilisateur répond « Non » : sans aucun ajout de code, l’AlertDialog sera fermée, mais notre Activity restera ouvert : nous avons dans ce cas annulé le clic sur la touche « Retour ».

 

public override void OnBackPressed() {

	AlertDialog.Builder monAlerte = new AlertDialog.Builder (this);
	monAlerte.SetTitle ("Voulez-vous quitter l'application ?");

	monAlerte.SetPositiveButton ("Oui", (senderAlert, args) => {
		//Confirmation : fermeture de l’écran
	  	Finish();
	} );

	monAlerte.SetNegativeButton ("Non", (senderAlert, args) => {
		//Annulation du clic sur la touche « Retour »
	} );
	
	//Affichage de l’AlertDialog
	RunOnUiThread (() => {
		monAlerte.Show();
	} );
}

Le rendu à l'écran est le suivant :

SSI_XAMESC_01

 

 

Laisser un commentaire

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

Captcha *

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