Comment fermer l'activité et revenir à l'activité précédente dans android

J'ai une activité principale, que quand 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 de retour, je veux que ma nouvelle activité se ferme et elle doit revenir à l'activité principale d'origine.

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

Comment puis-je simplement fermer l'activité actuellement mise au point, puis revenir à l'activité principale?

ÉDITÉ

Le fait que le bouton de retour de mon téléphone ferme également toute mon application, m'amène à penser que j'ai mal démarré la deuxième activité?


OK, j'ai cherché,

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

Pour l'activité paramètres lorsque j'appuie sur le bouton Retour, il revient à l'activité principale.

Avec l'activité mentionnée ci-dessus dans la question principale, il quitte simplement mon application entière.

, Donc le problème ne semble pas être le code pour terminer l'activité, mais l'activité elle-même.

112
demandé sur Tausif Shahbaz 2013-03-13 22:48:25

16 réponses

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

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

Soit

, Vous avez défini android:noHistory = "true" pour MainActivity dans AndroidManifest.xml, qui provoque MainActivity à finish automatiquement en appuyant sur la touche retour.

Ou

Avant de passer à votre "SettingsActivity", vous avez appelé finish() votre MainActivity, ce qui le tue. Lorsque vous appuyez sur le bouton Retour, car aucune autre activité n'est préréglée pile à pop, il retourne à l'écran principal.

162
répondu Ajay S 2017-10-21 06:58:07

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

Si vous voulez retourner les résultats à l'activité une, vous devez:

startActivityForResults(myIntent, MY_REQUEST_CODE);

Dans votre activité appelée, Vous pouvez ensuite obtenir L'intention du paramètre onCreate () ou utilisé

getIntent();

Pour définir un résultat à l'activité one puis dans activité deux faire

setResult(Activity.RESULT_OK, MyIntentToReturn);

Si vous n'avez pas l'intention de revenir puis juste dire

setResult(Activity.RESULT_OK);

Si l'activité a de mauvais résultats, vous pouvez utiliser Activity.RESULT_CANCELED (ceci est utilisé par défaut). Ensuite, dans la première activité, 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 () comme décrit ci-dessus avec vos résultats déjà définis.

52
répondu jjNford 2013-03-13 19:39:22

Lorsque vous cliquez sur votre bouton, vous pouvez faire appel:

super.onBackPressed();
13
répondu Zabador 2013-03-13 19:21:50

Si vous utilisez fragment u devrait utiliser

getActivity().onBackPressed();

Si vous utilisez une seule activité, vous pouvez utiliser

finish();
6
répondu Osama Ibrahim 2014-12-02 18:00:23

Essayez ce code au lieu de finish:

onBackPressed();

5
répondu Sanaz Afzali 2014-09-15 10:44:19

Tu rends ça trop dur. Si je comprends ce que vous essayez de faire correctement, le bouton "Retour" intégré et Android lui-même feront tout le travail pour vous: http://developer.android.com/guide/components/tasks-and-back-stack.html

En outre, l'implémentation d'un bouton "Retour" personnalisé viole les directives de qualité UX-N1 de L'application principale: http://developer.android.com/distribute/googleplay/quality/core.html

4
répondu peejaybee 2013-03-13 19:19:22
Button edit = (Button) view.findViewById(R.id.yourButton);
edit.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View view) {
        Intent intent = new Intent(this, YourMainActivity.class);
        startActivity(intent);
        finish();
    }
});
4
répondu KEYSAN 2013-12-19 12:45:32

Ceci ferme l'application entière:

this.finish();
4
répondu Logar314159 2014-11-01 23:07:09

Je crois que votre deuxième activité n'est probablement pas liée à votre activité principale en tant qu'activité enfant. Vérifiez votre fichier AndroidManifest.xml et voyez si l'entrée <activity> de votre activité enfant inclut un attribut android:parentActivityName. Cela devrait ressembler à ceci:

<?xml ...?>
...
<activity
    android:name=".MainActivity"
    ...>
</activity>
<activity
    android:name=".ChildActivity"
    android:parentActivityName=".MainActivity"
    ...>
</activity>
...
2
répondu Trevor 2016-05-04 21:45:12

N'appelez simplement pas finish() sur votre MainActivity alors cela élimine le besoin de remplacer votre onBackPressed() dans votre SecondActivity sauf si vous faites d'autres choses dans cette fonction. Si vous vous sentez le "besoin" de ce bouton de retour, alors vous pouvez simplement appeler finish() sur SecondActivity et qui vous mènera à votre MainActivity tant que vous n'avez pas appelé finish() sur il

1
répondu codeMagic 2013-03-13 18:50:07

Je ne sais pas si c'est même utile ou non mais je me pavanais avec le même problème et j'ai trouvé un moyen assez facile, avec seulement une variable booléenne globale et une action onResume (). Dans mon cas, mon activité C si vous cliquez sur un bouton spécifique, cela devrait déclencher la finish () de L'activité B!

Activity_A - > Activity_B - > Activity_C

Activity_A (ouvre normalement Activity_B)

Activity_B (un clic sur un bouton ouvre Activity_C):

// Global:
boolean its_detail = false;
// -------
SharedPreferences prefs =  getApplicationContext().getSharedPreferences("sharedpreferences", 0);
boolean v = prefs.getBoolean("select_client", false);

its_detail = v;

startActivity(C);

@Override
public void onResume(){
     super.onResume();
     if(its_detail == true){
        finish();
     }
}

Donc, chaque fois que je clique sur le bouton sur L'activité C il ferait la fonction" onResume () " de L'activité B et retournerait à L'activité A.

1
répondu user2742861 2013-10-17 13:45:09
 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        if ( id == android.R.id.home ) {
            finish();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

Essayez cela, il travaille à la fois sur barre d'outils bouton de retour, comme bouton de retour.

1
répondu Puni 2017-07-30 14:21:33
{ getApplicationContext.finish();   }

Essayez cette méthode..

0
répondu Abhishek 2015-03-17 18:20:17

Il est possible que vous appeliez finish(); dans l'événement click button, l'activité principale est fermée juste après avoir cliqué sur le bouton et lorsque vous revenez de l'activité suivante, l'application est sortie car l'activité principale est déjà fermée et il n'y a pas d'activité active.

0
répondu raman rayat 2016-01-24 17:35:39

Finish ferme toute l'application, c'est quelque chose que je déteste dans le développement Android pas fini c'est bien mais qu'ils ne suivent pas la syntaxe ok qu'ils ont

startActivity(intent)

Pourquoi pas

CloseActivity(intention) ?

0
répondu Kent Hansen 2017-08-23 11:09:20

Nous avons rencontré une situation très similaire.

Activité 1 (Ouverture) -> Activité 2 (Extrait) -> Activité 3 (Détail)

Réponse incorrecte de "on back press"

  • retour de L'appareil appuyez sur L'activité 3 fermera également L'activité 2.

J'ai vérifié toutes les réponses postées ci-dessus et aucune d'entre elles n'a fonctionné. La syntaxe Java pour la transition entre L'activité 2 et L'activité 3 a été revue pour être correcte.

Frais de codage sur l'appel d'une 3ème partie App. par une Activité. Nous avons décidé d'étudier l'angle de configuration-nous permettant éventuellement d'identifier la cause profonde du problème.

Champ: Configuration de l'Activité 2 (l'appelant).

Cause Racine:

android:launchMode="singleInstance"

Solution:

android:launchMode="singleTask"

Apparemment sur ce problème "on back press" singleInstance considère les activités invoquées dans une instance avec l'activité appelante, alors que singleTask permettra d'invoquer Activités ayant leur propre identité assez pour que la presse arrière prévue fonctionne pour fonctionner comme il se doit.

0
répondu Raven 2018-06-06 03:49:11