163 votes

Comment fermer une activité et revenir à l'activité précédente sous Android ?

J'ai une activité principale, qui lorsque je clique sur un bouton, démarre une nouvelle activité, j'ai utilisé le code suivant pour le faire :

Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);

Le code ci-dessus a été exécuté à partir de l'activité principale.

Maintenant, dans ma nouvelle activité qui est appelée par l'activité principale, j'ai un bouton de retour. Lorsque je clique sur ce bouton, je veux que ma nouvelle activité se ferme et qu'elle revienne à l'activité principale d'origine.

J'ai essayé d'appeler super.finish() et juste finish() (à partir de la nouvelle activité) mais cela ferme alors toute mon application (y compris mon activité principale).

Comment puis-je simplement fermer l'activité en cours et revenir à l'activité principale ?

EDITED

Le fait que le bouton "Retour" de mon téléphone ferme également toute l'application me fait penser que j'ai mal lancé la deuxième activité ?


OK, j'ai cherché,

J'ai créé une activité de paramétrage qui utilise le même code de manifeste et le même code pour démarrer l'activité.

Pour l'activité de paramétrage, lorsque j'appuie sur le bouton retour, l'activité principale est rétablie.

Avec l'activité mentionnée ci-dessus dans la question principale, elle quitte simplement toute mon application.

Le problème ne semble donc pas venir du code de fin d'activité mais de l'activité elle-même.

226voto

TGMCians Points 11195

Je pense que vous appelez finish() méthode dans MainActivity avant de commencer SettingsActivity .

Le scénario que vous avez décrit peut se produire de deux façons :

SOIT

Vous avez mis android:noHistory = "true" para MainActivity à l'intérieur de AndroidManifest.xml ce qui entraîne MainActivity a finish automatiquement en appuyant sur la touche retour.

OU

Avant de passer à votre activité "Paramètres", vous avez appelé finish() dans votre MainActivity ce qui le tue. Lorsque vous appuyez sur le bouton Retour, puisqu'aucune autre activité n'est prédéfinie dans la pile, il revient à l'écran principal.

67voto

jjNford Points 2676

Vous pouvez revenir à l'activité précédente en appelant simplement finish() dans l'activité où vous vous trouvez. Notez que tout code après l'appel de finish() sera exécuté - vous pouvez simplement faire un retour après l'appel de finish() pour résoudre ce problème.

Si vous voulez renvoyer les résultats à l'activité 1, vous devrez alors lancer l'activité 2 :

startActivityForResults(myIntent, MY_REQUEST_CODE);

À l'intérieur de l'activité appelée, vous pouvez ensuite obtenir l'intention à partir du paramètre onCreate() ou en utilisant la méthode suivante

getIntent();

Pour définir le retour d'un résultat à l'activité un, puis dans l'activité deux faire

setResult(Activity.RESULT_OK, MyIntentToReturn);

Si vous n'avez pas l'intention de revenir, dites-le simplement.

setResult(Activity.RESULT_OK);

Si l'activité a de mauvais résultats, vous pouvez utiliser Activity.RESULT_CANCELED (cette option est utilisée par défaut). Ensuite, dans l'activité 1, vous faites

onActivityResult(int requestCode, int resultCode, Intent data) {
    // Handle the logic for the requestCode, resultCode and data returned...
}

Pour terminer l'activité deux, utilisez les mêmes méthodes avec finish() que celles décrites ci-dessus avec vos résultats déjà établis.

17voto

Osama Ibrahim Points 44

Si vous utilisez un fragment, vous devez utiliser

getActivity().onBackPressed();

Si vous utilisez une seule activité, vous pouvez utiliser

finish();

16voto

Zabador Points 338

Lorsque vous cliquez sur votre bouton, vous pouvez le faire appeler :

super.onBackPressed();

10voto

threed Points 2131

Je pense que votre deuxième activité n'est probablement pas liée à votre activité principale en tant qu'activité enfant. Vérifiez votre AndroidManifest.xml et voyez si le <activity> l'entrée pour l'activité de votre enfant comprend une android:parentActivityName attribut. Cela devrait ressembler à quelque chose comme ceci :

<?xml ...?>
...
<activity
    android:name=".MainActivity"
    ...>
</activity>
<activity
    android:name=".ChildActivity"
    android:parentActivityName=".MainActivity"
    ...>
</activity>
...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X