55 votes

Terminer l'activité parent et actuelle dans Android

J'ai 3 activités. L'activité qui conduit à l'activité B, qui à son tour peut revenir à l'activité d'Un ou de début d'activité C. Cependant, si j'appuie sur le dos de l'activité C l'application doit fermer.

Pour résumer:

  • L'activité d'Un chantier B
  • En appuyant sur l'Arrière de l'activité B doit conduire à Une
  • Activité B commence activité C
  • En appuyant sur l'Arrière de l'activité C devrait fermer l'application

Comment dois-je aller de l'activité B to C? Ce code me donne une NullPointerException sur la dernière ligne:

Intent intent=new Intent(ActivityB.this, ActivityC.class);
startActivity(intent);
ActivityB.this.finish();
ActivityB.this.getParent().finish();

Si je passe les deux dernières lignes, je reçois aussi un pointeur null.

57voto

codinguser Points 3979

Je ne sais pas si cela va fonctionner, mais vous pouvez essayer:

  • De l'Activité A, début de l'activité B pour un résultat à l'aide d' startActivityForResult()

  • Dans l'Activité B, lorsque l'utilisateur déclenche l'Activité de C, démarrage de l'activité C.

startActivity() retourne immédiatement, de sorte

  • définir un résultat qui servira à alimenter Un pour finir ainsi,

  • Appelez finish() en B.

  • Lorsque A reçoit que le résultat de B, Un des appels finish() sur lui-même.

À défaut, vous pourriez faire de l'Activité de C dans son propre app, puis fermer la première application (A & B) après le début de la deuxième.

P. S. Prendre Falmarri commentaire en considération comme vous aller de l'avant!
Bonne chance.

36voto

Anuj Agarwal Points 171

Si vous voulez terminer une activité parent d'un enfant de l'activité,

Dans le parent de l'activité, alors que le déclenchement de l'enfant, utiliser la commande suivante:-

startActivityForResult(intent_name,any_integer_variable);

et remplacer la Méthode onActivityResult de la manière suivante:-

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(resultCode==2){
        finish();
    }
}

Maintenant, dans l'activité enfant, remplacer onStop et onDestroy de la manière suivante:-

protected void onStop() {
    setResult(2);
    super.onStop();
}
@Override
protected void onDestroy() {
    setResult(2);
    super.onDestroy();
}

Remarquez que j'ai mis la valeur 2 dans l'activité enfant, et je suis le rechercher dans l'activité parent. Si la valeur est la même que j'ai mis, puis l'activité parent fini aussi. Ensuite, vous pouvez utiliser récursive approches pour d'autres activités.

14voto

TS.xy Points 451

Vous shou utilisation onActivityResult méthode dans votre Activité parent

Supposons que l'Activité est Un parent de l'Activité B si vous voulez cliquez sur le bouton retour de l'Activité B pour quitter l'Application (également à la sortie de l'Activité A)

Dans votre Activité B, en onStop() ou onDestory()

vous appelez

setResult(0); //any int number is fine

cela va passer un code de résultat de l'activité de son parent

Votre parent Actvity Une, écoute le code de résultat vous aurez besoin d'utiliser onActivityResultméthode à l'intérieur de la méthode, vous pouvez appeler

if(resultCode == 0) //matches the result code passed from B
{
    ActivityA.this.finish()
}

Il fonctionne pour moi :)

4voto

LifesAway Points 26

Je n'ai rien fait de tout ça. C'est ainsi que je réviserais votre code.

le code que vous utilisez pour saisir une autre intention:

 Intent whatEverIntentName = new Intent("Path.to.next.Intent");
startActivity(whatEverIntentName);
finish();
 

De cette façon, vous quittez toujours en appuyant en arrière. Mais attendez! Vous pouvez modifier la façon dont vous souhaitez que votre touche de retour réagisse lorsqu'elle est enfoncée.

Faites ceci:

 @Override
public void onBackPressed() {
    super.onBackPressed();
    Intent whatEverIntentName = new Intent("Path.to.the.activity.before.it");
    startActivity(whatEverIntentName);
// Don't add finish here. 
//This is necessary because you finished your last activity with finish();
}
 

3voto

Ajay Randhumal Points 16

Pour démarrer l'activité " B "de l'activité" A " utilisez la méthode startActivityForResult comme suit:

       Intent intent2 = new Intent(A.this,B.class);
       startActivityForResult(intent2,2);

Au lieu de 2, vous pouvez utiliser n'importe quel chiffre.

Mettre en œuvre la méthode suivante pour attraper le résultat de l'activité de l'enfant:

      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == 2) {
        finish();
    }
}

N'oubliez pas d'utiliser le même chiffre que vous avez utilisé lors du démarrage de l'activité.

Maintenant en activité 'B' effectuer les opérations suivantes: Pour démarrer l'activité "C"

     Intent intent3 = new Intent(B.this,C.class);
     startActivityForResult(intent3,3);

Mettre en œuvre la méthode

     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == 3) {
                         setResult(2);
        finish();
    }
}

Ici, vous êtes en train de terminer l'activité " A " par la mise en résultat que 2. Ainsi, la finition de l'activité "B", termine l'activité "A".

Et mettre follwing ligne dans l'activité "C":

             setResult(3);

Dès que votre activité 'C' commence,vos activités précédentes sont terminées.

Donc la sauvegarde de l'activité " C " ferme en fait la demande.

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