J'ai une activité principale, que lorsque je clique sur un bouton, commence 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é appelée activité principale, j'ai un bouton Précédent . Lorsque je clique sur ce bouton Précédent, je veux que ma nouvelle activité se ferme et qu'elle doit revenir à 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é qui est actuellement mise au point, puis revenir à l'activité principale?
ÉDITÉ
Le fait que le bouton de retour de mon téléphone ferme également l'ensemble de l'application m'amène à penser que j'ai démarré la deuxième activité de manière incorrecte?
OK j'ai regardé,
J'ai créé une activité de configuration qui utilise le même code de manifeste et le même code pour démarrer l'activité.
Pour les paramètres Activité lorsque j'appuie sur le bouton Précédent, il revient à l'activité principale.
Avec l'activité mentionnée ci-dessus dans la question principale, elle quitte simplement toute mon application.
Donc, le problème ne semble pas être avec le code pour terminer l'activité, mais l'activité elle-même.
Je pense que vous appelez la méthode finish()
dans MainActivity
avant de commencer SettingsActivity
.
Le scénario que vous avez décrit se produira de deux manières:
NON PLUS
Vous avez défini Android:noHistory = "true"
pour MainActivity
dans AndroidManifest.xml
, de sorte que MainActivity
devient finish
automatiquement en appuyant sur la touche Précédent.
OR
Avant de passer à votre 'SettingsActivity', vous avez appelé finish()
dans votre MainActivity
, qui le tue. Lorsque vous appuyez sur le bouton Précédent, puisqu’aucune autre activité n’est préréglée dans la pile, elle retourne à l’écran principal.
Vous pouvez revenir à l'activité précédente en appelant simplement finish () dans l'activité en cours. Notez que tout code après l'appel de finish () sera exécuté - vous pouvez simplement faire un retour après avoir appelé finish () pour résoudre ce problème.
Si vous souhaitez renvoyer les résultats à l'activité un, vous devez disposer des éléments suivants:
startActivityForResults(myIntent, MY_REQUEST_CODE);
Dans votre activité appelée, vous pouvez alors obtenir l’intention à partir du paramètre onCreate () ou
getIntent();
Pour remettre un résultat à l’activité un puis à l’activité deux faire
setResult(Activity.RESULT_OK, MyIntentToReturn);
Si vous n'avez pas l'intention de revenir, dites simplement
setResult(Activity.RESULT_OK);
Si l'activité a de mauvais résultats, vous pouvez utiliser Activity.RESULT_CANCELED (utilisé par défaut). Ensuite, dans l'activité un que 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 (), telles que décrites ci-dessus, avec vos résultats déjà définis.
Lorsque vous cliquez sur votre bouton, vous pouvez le faire appeler:
super.onBackPressed();
si vous utilisez fragment, vous devriez utiliser
getActivity().onBackPressed();
si vous utilisez une seule activité, vous pouvez utiliser
finish();
Ceci ferme toute l'application:
this.finish();
Vous faites cela trop dur. Si je comprends bien ce que vous essayez de faire correctement, le bouton "Retour" intégré et Android lui-même feront tout le travail à votre place: http://developer.Android.com/guide/components/tasks-and- back-stack.html
En outre, l'implémentation d'un bouton "Précédent" personnalisé enfreint les consignes de sécurité de l'application de base UX-N1: http://developer.Android.com/distribute/googleplay/quality/core.html
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();
}
});
Je pense que votre deuxième activité n’est probablement pas liée à votre activité principale en tant qu’activité pour enfants. Vérifiez votre fichier AndroidManifest.xml
et voyez si l'entrée <activity>
de votre activité enfant contient un attribut Android:parentActivityName
. Ça devrait ressembler a quelque chose comme ca:
<?xml ...?>
...
<activity
Android:name=".MainActivity"
...>
</activity>
<activity
Android:name=".ChildActivity"
Android:parentActivityName=".MainActivity"
...>
</activity>
...
Je ne sais pas si c'est utile ou non, mais je me débattais avec le même problème et j'ai trouvé un moyen assez simple, avec seulement une variable booléenne globale et une action onResume (). Dans mon cas, si mon activité C est cliquée sur un bouton spécifique, elle devrait déclencher la fin () de l'activité B!
Activité_A -> Activité_B -> Activité_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();
}
}
Ainsi, chaque fois que je clique sur le bouton de l'activité C, il remplit la fonction "onResume ()" de l'activité B et retourne à l'activité A.
N'appelez simplement pas finish()
sur votre MainActivity
, cela éliminera le besoin de remplacer votre onBackPressed()
dans votre SecondActivity
à moins que vous ne fassiez autre chose dans cette fonction. Si vous sentez le "besoin" de ce bouton de retour, vous pouvez simplement appeler finish()
sur le SecondActivity
et cela vous mènera à votre MainActivity
tant que vous n’avez pas appelé finish()
dessus.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if ( id == Android.R.id.home ) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
Essayez ceci fonctionne à la fois sur bouton retour de la barre d’outils comme bouton retour matériel .
Terminer ferme toute l’application, c’est quelque chose que je déteste dans le développement d’Android et qui n’a pas besoin de terminer, c’est bien, mais qu’ils ne suivent pas la syntaxe correcte dont ils disposent.
startActivity(intent)
Pourquoi pas
closeActivity (intention) ?
il est possible que vous appeliez finish (); dans l'événement de bouton clic de sorte que l'activité principale soit fermée juste après que vous ayez cliqué sur le bouton et lorsque vous revenez de l'activité suivante, l'application est fermée, car l'activité principale est déjà fermée et aucune activité n'est active.
Nous avons rencontré une situation très similaire.
Activité 1 (Ouverture) -> Activité 2 (Aperçu) -> Activité 3 (Détail)
Réponse incorrecte "au dos de la presse"
J'ai vérifié toutes les réponses affichées ci-dessus et aucune d'entre elles n'a fonctionné. La syntaxe Java pour la transition entre les activités 2 et 3 a été révisée pour être correcte.
Frais de codage sur appeler une application tierce. par une activité. Nous avons décidé d'étudier l'angle de configuration, ce qui nous a finalement permis d'identifier la cause première du problème.
Portée : Configuration de l'activité 2 (appelant).
Cause première :
Android:launchMode="singleInstance"
Solution :
Android:launchMode="singleTask"
Apparemment, sur cette question "on Back Press" singleInstance considère les activités invoquées dans une instance avec l'activité appelante, alors que singleTask autorisera les activités invoquées ayant leur propre identité suffisamment pour que le dos pressé puisse fonctionner travailler comme il se doit.
{ getApplicationContext.finish(); }
Essayez cette méthode ..
sur la méthode onCreate de votre activité, écrivez le code suivant.
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
Ensuite, remplacez la méthode sélectionnée par votre activité onOptionsItem comme suit
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case Android.R.id.home:
finish();
}
return super.onOptionsItemSelected(item);
}
Et vous êtes prêt à partir.