J'essaie de déterminer comment afficher la flèche «vers le haut» dans Xamarin.Forms sans pousser une page sur la pile. IE Je veux juste effectuer une action lorsque le bouton de retour est enfoncé. Je suis complètement coincé là-dessus, donc toute aide serait appréciée.
J'ai essayé de créer un moteur de rendu personnalisé qui gère une propriété de vue appelée DisplayHomeAsBack
. Ce qui dans le moteur de rendu appelle ce qui suit:
FormsAppCompatActivity context = ((FormsAppCompatActivity)Forms.Context);
Android.Support.V7.App.ActionBar actionBar = context.SupportActionBar;
if (actionBar != null)
{
actionBar.SetDisplayHomeAsUpEnabled(element.DisplayHomeAsBack);
}
Malheureusement, il semble que cela ne fasse absolument rien, même si tous les didacticiels en ligne et les questions de stackoverflow pour Android suggèrent cette méthode.
Le plan est que je puisse ensuite utiliser le remplacement "OnBackButtonPressed" dans MasterDetailPage, ce qui devrait me permettre d'effectuer cette action. Malheureusement, l'affichage du bouton de retour a été le plus gros obstacle jusqu'à présent!
Une idée d'une meilleure façon de faire cela ou comment je peux faire fonctionner le mécanisme actuel?
ÉDITER
J'ai créé un projet et l'ai chargé dans cette question sur les forums de support Xamarin, si cela peut aider. http://forums.xamarin.com/discussion/comment/186330#Comment_186330
Désolé de vous avoir fait attendre si longtemps!
Attention, je n'ai pas réellement exécuté ce code et l'ai changé du mien donc je serais surpris qu'il fonctionne parfaitement sans quelques changements.
Donc, ci-dessous devrait ajouter un bouton de retour là où il n'y en avait pas auparavant (donc comme quand il n'y a pas vraiment de page vers laquelle revenir), puis nous ajouterons une action personnalisée à effectuer lorsque vous appuyez dessus.
Je vous suggère de pousser une nouvelle page sur la pile sans utiliser d'animation afin qu'elle soit transparente pour l'utilisateur et rend également tout cela beaucoup plus simple, mais si vous ne voulez absolument pas faire cela, la méthode ci-dessous devrait fonctionner.
Activité principale:
//Use this to subscribe to the event which will create the back button
public override bool OnCreateOptionsMenu(IMenu menu) {
if(menu != null && App.AppMasterPage != null) { //You will need this to make sure you are on your MasterDetailPage, just store a global reference to it in the App class or where ever
Xamarin.Forms.MessagingCenter.Unsubscribe<string>(this, "CreateBackButton");
Xamarin.Forms.MessagingCenter.Subscribe<string>(this, "CreateBackButton", stringWeWillNotUse => { //Use this to subscribe to the event that creates the back button, then when you want the back button to show you just run Xamarin.Forms.MessagingCenter.Send<string>(this, "CreateBackButton")
ActionBar.DisplayOptions = ActionBarDisplayOptions.ShowTitle | ActionBarDisplayOptions.ShowHome | ActionBarDisplayOptions.UseLogo | ActionBarDisplayOptions.HomeAsUp; //You may need to play with these options to get it working but the important one is 'HomeAsUp' which should add the back button
});
} else {
Xamarin.Forms.MessagingCenter.Unsubscribe<string>(this, "CreateBackButton");
}
return base.OnCreateOptionsMenu(menu);
}
Maintenant, l'étape suivante consiste à effectuer une action personnalisée lorsque vous appuyez dessus. Je pense que vous pouvez remplacer OnBackPressed()
ou OnOptionsItemSelected()
dans MainActivity
ou vous pouvez peut - être remplacer la MasterDetailPage
méthode. Je ne suis pas sûr.
Quel que soit celui qui fonctionne pour vous, à l'intérieur de ce remplacement, je vérifierais simplement si vous êtes sur votre App.AppMasterPage
comme nous l'avons fait ci-dessus, et si c'est le cas, envoyez un MessagingCenter
message auquel vous êtes App.AppMasterPage
déjà abonné afin qu'il gère l'action personnalisée .
Si vous êtes bloqué, faites-le moi savoir!
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots