web-dev-qa-db-fra.com

Android - Simuler le bouton Retour

Lorsque j'appuie sur un bouton de mon application, je dois revenir à la dernière activité.

Des idées?

65
david

L'appel de finish() à partir de l'activité à laquelle vous souhaitez mettre fin devrait s'en occuper.

Modifier plusieurs années plus tard: Cela fonctionne toujours, mais c'est un peu une approche lourde. Lorsque j'ai initialement publié ceci, Fragments n'existait pas, et (comme plusieurs commentateurs l'ont souligné) cela ne fonctionne pas tout à fait de la même manière lorsque Fragments est impliqué. Il existe de meilleures approches maintenant si vous utilisez Fragments.

94
Chris Thompson

Pour mémoire: la méthode décrite ne fait pas la même chose que le bouton Précédent dans certains cas, mais vous pouvez appeler

this.onBackPressed();

ou

getActivity().onBackPressed();

si vous êtes dans un fragment pour obtenir exactement le même comportement.

66
黄雨伞

lors de l'utilisation de fragments:

getFragmentManager().popBackStack();

ou

getSupportFragmentManager().popBackStack();

si vous utilisez le package Android.support.v4.app

36
zajac.m2

Il s'agit d'une situation où le même fragment peut parfois être le seul fragment d'une activité, et parfois faire partie d'une activité multi-fragments, par exemple sur une tablette où deux fragments sont visibles en même temps.

/**
 * Method that can be used by a fragment that has been started by MainFragment to terminate
 * itself. There is some controversy as to whether a fragment should remove itself from the back
 * stack, or if that is a violation of the Android design specs for fragments. See here:
 * http://stackoverflow.com/questions/5901298/how-to-get-a-fragment-to-remove-itself-i-e-its-equivalent-of-finish
 */
public static void fragmentImplementCancel(Fragment fragment) {

    FragmentActivity fragmentActivity = fragment.getActivity();
    FragmentManager fragmentManager = fragmentActivity.getSupportFragmentManager();

    if (fragmentManager.getBackStackEntryCount() == 1) {
        fragmentManager.popBackStack();
    }
    else {
        fragmentActivity.finish();
    }
}

Ce code peut être appelé pour implémenter un bouton Annuler, par exemple.

    if (theButton.getId() == R.id.btnStatusCancel) {
        StaticMethods.fragmentImplementCancel(this);
    }
1
RenniePet