Android: retour à l'activité précédente
je veux faire quelque chose de simple sur android app. Comment est-il possible de revenir à une ancienne activité.
Quel code dois-je retourner à l'activité précédente
22 réponses
les activités Android sont stockées dans la pile d'activités. Revenir à une activité antérieure peut signifier deux choses.
-
vous avez ouvert la nouvelle activité d'une autre activité avec startActivityForResult . Dans ce cas, vous pouvez simplement appeler la fonction finishActivity() de votre code et cela vous ramènera à l'activité précédente.
-
garder le suivi de l'activité de la pile. Chaque fois que vous commencez une nouvelle activité avec une intention, Vous pouvez spécifier un drapeau d'intention comme
FLAG_ACTIVITY_REORDER_TO_FRONT
ouFLAG_ACTIVITY_PREVIOUS_IS_TOP
. Vous pouvez l'utiliser pour commuter entre les activités de votre application. Je ne les ai pas beaucoup utilisés. Regardez les drapeaux ici: http://developer.android.com/reference/android/content/Intent.html
, Comme mentionné dans les commentaires, si l'activité est ouverte avec startActivity()
alors on peut la fermer avec finish()
.
Si vous souhaitez utiliser le bouton Up, vous pouvez attraper cela dans onOptionsSelected(MenuItem item)
méthode avec la vérification de L'élément ID contre android.R.id.home
contrairement à R.id.home
comme mentionné dans les commentaires.
Essayer Activity#finish()
. C'est plus ou moins ce que le bouton de retour fait par défaut.
il suffit d'écrire sur le clic finition () . Il vous mènera à l'activité précédente.
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
cela vous mènera à une activité antérieure de garder sa pile et de nettoyer toutes les activités après elle de la pile.
par exemple, si stack était A - >B->C->D et que vous démarrez B avec ce drapeau, stack sera a - >b
voulez-vous prendre le contrôle du comportement du bouton arrière? Vous pouvez remplacer le bouton Précédent (pour passer à une activité spécifique) par l'une des deux méthodes suivantes.
pour Android 1.6 et inférieur:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// do something on back.
return true;
}
return super.onKeyDown(keyCode, event);
}
ou si vous ne supportez Android 2.0 ou plus:
@Override
public void onBackPressed() {
// do something on back.
return;
}
pour plus de détails: http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html
il suffit d'appeler cette méthode pour terminer l'activité actuelle ou de revenir par onBackPressed
finish();
ou
onBackPressed();
si vous avez configuré correctement L'AndroidManifest.fichier xml avec activity parent, vous pouvez utiliser:
NavUtils.navigateUpFromSameTask(this);
où il s'agit de l'activité de votre enfant.
si vous voulez aller à la juste envie d'aller de l'activité précédente utilisation
finish();
ou
onBackPressed();
si vous souhaitez accéder à la deuxième activité ou à une activité inférieure, utilisez la mention suivante:
intent = new Intent(MyFourthActivity.this , MySecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//Bundle is optional
Bundle bundle = new Bundle();
bundle.putString("MyValue1", val1);
intent.putExtras(bundle);
//end Bundle
startActivity(intent);
ajoutez ceci dans votre méthode onCLick (), il va revenir à votre activité précédente
finition ();
ou vous pouvez utiliser ceci. Il a fonctionné parfaitement pour moi
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if ( id == android.R.id.home ) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
vous pouvez explicitement appeler onBackPressed
est la manière la plus facile
Voir retourner à l'activité précédente pour plus de détails
commencez la deuxième activité en utilisant l'intention (utilisez startActivity
ou startActivityForResult
selon vos exigences). Maintenant, lorsque l'utilisateur presse le bouton retour, l'activité en cours sur le dessus sera fermé et la précédente sera affichée.
permet maintenant de dire que vous avez deux activités, une pour sélectionner certains paramètres pour l'utilisateur, comme la langue, le pays, etc, et après avoir sélectionné, l'utilisateur clique sur le bouton Suivant pour aller au formulaire de connexion (par exemple) . Maintenant, si la connexion est échoue, alors l'utilisateur aura sur l'activité de connexion, que si la connexion est réussie ?
Si la connexion est réussie, alors vous devez commencer une autre activité. Cela signifie qu'une troisième activité sera lancée, et il y a toujours deux activités en cours. Dans ce cas, il sera bon d'utiliser startActivityForResult
. Lorsque la connexion est réussie, envoyer les données OK de nouveau à la première activité et fermer l'activité de connexion. Lorsque les données sont reçues, commencez la troisième activité et fermez la première. en utilisant terminer.
a eu le même problème et
finish(); OR super.onBackPressed();
a bien fonctionné pour moi, les deux ont bien fonctionné, mais pas de chance avec return
Vous pouvez essayer ceci:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
et si vous voulez sur le bouton cliquez revenir en arrière puis il suffit de mettre
bbsubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
l'Essayer c'est l'acte que vous avez appuyez sur le bouton retour bouton
finish();
onBackPressed();
toutes les nouvelles activités / intentions par défaut ont un comportement back/previous, sauf si vous avez codé un finish()
sur l'activité appelant.
je suggère les NavUtils.navigateUpFromSameTask (), c'est facile et très simple, vous pouvez l'apprendre du développeur google.Souhaite que je pourrais vous aider!
outre toutes les réponses mentionnées, leur est encore une façon alternative de le faire, disons que vous avez deux classes, Classe A et classe B.
Classe A vous avez fait des activités comme cocher la case select, imprimer des données et l'intention de la classe B. Classe B, vous souhaitez passer plusieurs valeurs à la classe A et maintenir l'état précédent de la classe A, vous pouvez utiliser, essayer cette méthode alternative ou télécharger le code source pour démontrer ce
ou
http://developer.android.com/reference/android/content/Intent.html
@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 de la barre d'outils bouton de retour comme bouton de retour .
essayez ceci en, première activité 151930920"
Intent mainIntent = new Intent(Activity1.this, Activity2.class);
this.startActivity(mainIntent);
dans votre deuxième activité
@Override
public void onBackPressed() {
this.finish();
}
il y a peu de cas pour revenir à votre activité précédente:
Case 1: si vous voulez reprendre le résultat de votre activité précédente, alors ActivityA.java
Intent intent = new Intent(ActivityA.this, FBHelperActivity.class);
startActivityForResult(intent,2);
FBHelperActivity.java
Intent returnIntent = new Intent();
setResult(RESULT_OK, returnIntent);
finish();
Cas 2: ActivityA -- > FBHelperActivity - - - >ActivityA
ActivityA.java
Intent intent = new Intent(ActivityA.this, FBHelperActivity.class);
startActivity(intent);
FBHelperActivity.java
after getting of result call finish();
By this way your second activity will finish and because
you did not call finish() in your first activity then
automatic first activity is in back ground, will visible.