1

J'utilise le framework MvvmCross pour construire une application multiplateforme (iOS, Android, WP7). J'essaye actuellement de manipuler le bouton arrière pressé sur Android d'une activité TabHost. L'activité TabHost a été démarrée à partir d'une autre activité (qui ne figure pas dans la sélection de l'onglet) et je souhaite que le bouton de retour ferme l'application. Cependant, lorsque j'appuie sur le bouton précédent, je retourne à l'écran précédent.MonoDroid MVVMCross bouton retour appuyé sur un TabHost

Le 'NoHistory = "true"' ne semble pas fonctionner dans TabHost.

Je suis en train de manipuler mon bouton arrière dans la vue comme ci-dessous mais je ne suis pas sûr de ce qui peut être appelé dans le ViewModel pour fermer l'application.

public override bool OnKeyDown(Android.Views.Keycode keyCode, Android.Views.KeyEvent e) 
    { 
     if (keyCode == Keycode.Back) 
     { 

      return this.ViewModel.CloseThisApplication(); 

     } 
     return base.OnKeyDown(keyCode, e); 
    } 

Existe-t-il des méthodes qui peuvent être appelées pour fermer l'application? Ou avez-vous une meilleure idée de la façon dont cela peut être géré? Idéalement, la méthode pourrait être répliquée sur les trois plates-formes précitées.

Merci à l'avance

Répondre

2

Je ne pense pas que nous pouvons reproduire un appel exitNowPlease sur les 3 plates-formes - comme la plupart d'entre eux vous décourager de fournir une fonction de sortie - par exemple Je crois que la seule façon de quitter WindowsPhone7 est de lancer une exception non gérée.

Cependant, je pense que vous devriez être en mesure de réaliser ce que vous décrivez par:

  1. ajouter le Nohistory = true drapeau à l'activité de démarrage - une avant la tabhost. Ce drapeau NoHistory=true ne comprend pas ce type d'activité dans la pile arrière.
  2. Retirez votre gestionnaire de boutons de retour.

La plate-forme doit alors se comporter comme décrit.


également pour la plate-forme croisée de compensation de la pile arrière, voir l'explication ClearTop dans How to add an invisible ViewModel to the Navigation Stack in MvvmCross

+0

C'est grand, bien que dans certaines situations, je vais devoir rattraper le bouton arrière et surcharger sa méthode à un IMvxCommand. Y at-il un moyen de lier le bouton de retour dans le XML à l'une de ces commandes? Plutôt que de l'attraper moi-même et d'appeler une méthode dans le ViewModel? – Jake

+0

J'ai essayé le ["Comment ajouter un ViewModel invisible à la pile de navigation dans MvvmCross"] (http://stackoverflow.com/questions/10246013/how-to-add-an-invisible-viewmodel-to-the-navigation -stack-in-mvvmcross) mais ça ne me permet pas d'aller à la page précédente. – Jake

+0

Je suis sûr que vous pourriez ajouter quelque chose, mais on dirait que c'est quelque chose qui devrait être manipulé dans le codebehind – Stuart

Questions connexes