J'ai une activité principale, que 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 de retour, je souhaite 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 ma demande (y compris mon activité principale).
Comment puis-je simplement fermer l'activité actuellement ciblée, puis revenir à l'activité principale?
ÉDITÉ
Le fait que le bouton de retour de mon téléphone ferme également toute mon application, me laisse penser que j'ai mal démarré la deuxième activité?
OK j'ai cherché,
J'ai créé une activité Paramètres qui utilise le même code manifeste et le même code pour démarrer l'activité.
Pour les paramètres Activité lorsque j'appuie sur le bouton retour, cela revient à l'activité principale.
Avec l'activité mentionnée ci-dessus dans la question principale, il 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.
la source
Réponses:
Je pense que vous appelez la
finish()
méthodeMainActivity
avant de commencerSettingsActivity
.Le scénario que vous avez décrit se produira de deux manières:
SOIT
Vous avez mis
android:noHistory = "true"
à l'MainActivity
intérieurAndroidManifest.xml
qui provoqueMainActivity
definish
automatiquement en appuyant sur la touche retour.OU
Avant de passer à votre 'SettingsActivity', vous avez appelé
finish()
votreMainActivity
, qui le tue. Lorsque vous appuyez sur le bouton de retour, puisqu'aucune autre activité n'est prédéfinie dans la pile pour apparaître, il revient à l'écran principal.la source
Vous pouvez revenir à l'activité précédente en appelant simplement finish () dans l'activité dans laquelle vous vous trouvez. 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é 1, vous avez besoin de:
Dans votre activité appelée, vous pouvez ensuite obtenir l'intention à partir du paramètre onCreate () ou l'utiliser
Pour définir renvoyer un résultat à l'activité 1, puis à l'activité 2, faites
Si vous n'avez pas l'intention de revenir, dites simplement
Si l'activité a de mauvais résultats, vous pouvez utiliser Activity.RESULT_CANCELED (ceci est utilisé par défaut). Puis dans l'activité 1 tu fais
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à définis.
la source
Lorsque vous cliquez sur votre bouton, vous pouvez le faire appeler:
la source
si vous utilisez un fragment, vous devez utiliser
si vous utilisez une seule activité, vous pouvez utiliser
la source
essayez ce code au lieu de
finish
:onBackPressed();
la source
Vous rendez cela trop difficile. 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
De plus, la mise en œuvre d'un bouton "retour" personnalisé enfreint le guide de qualité des applications de base UX-N1: http://developer.android.com/distribute/googleplay/quality/core.html
la source
la source
Cela ferme toute l'application:
la source
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
AndroidManifest.xml
fichier et voyez si l'<activity>
entrée de votre activité enfant comprend unandroid:parentActivityName
attribut. Ça devrait ressembler a quelque chose comme ca:la source
Ne faites pas appel
finish()
à votreMainActivity
alors cela élimine le besoin de remplacer votreonBackPressed()
dans votreSecondActivity
sauf si vous faites d'autres choses dans cette fonction. Si vous vous sentez le « besoin » de ce bouton arrière, vous pouvez simplement appelerfinish()
leSecondActivity
et qui vous mènera à votreMainActivity
aussi longtemps que vous ne l' avez pas appeléfinish()
à ce sujetla source
Activity
ou revenez toujours auMainActivity
? De plus, si vous manquez de mémoire avec,Bitmaps
vous devriez lire cette partie de Docs . Ça m'a aidéJe ne sais pas si cela est même 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, mon activité C si vous cliquez sur un bouton spécifique, elle devrait déclencher la fin () de l'activité B!
Activity_A -> Activity_B -> Activity_C
Activity_A (ouvre normalement Activity_B)
Activity_B (sur un bouton, un clic ouvre Activity_C):
Ainsi, chaque fois que je clique sur le bouton de l'activité C, il exécute la fonction «onResume ()» de l'activité B et retourne à l'activité A.
la source
Essayez ceci, cela fonctionne à la fois sur le bouton de retour de la barre d' outils et sur le bouton de retour matériel .
la source
android:parentActivityName=".MainActivity"
pour le second. Ce code gère ce bouton Accueil / Précédent dans le toolbat et termine simplement l'activité en cours en revenant à la précédente dans la pile. Merci.Terminer ferme toute l'application, c'est quelque chose que je déteste dans le développement Android, pas finir c'est bien mais qu'ils ne suivent pas la syntaxe correcte qu'ils ont
Pourquoi pas
la source
Nous avons rencontré une situation très similaire.
Réponse incorrecte "à l'arrière"
J'ai vérifié toutes les réponses publiées ci-dessus et aucune d'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 lors de l'appel d'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 profonde du problème.
Portée : Configuration de l'activité 2 (appelant).
Cause première :
Solution :
Apparemment, sur ce numéro de «contre-presse», singleInstance considère les activités invoquées dans une instance avec l'activité appelante, alors que singleTask permettra aux activités invoquées ayant leur propre identité suffisante pour que la contre-presse prévue fonctionne comme il se doit.
la source
Essayez cette méthode.
la source
il est possible que vous appeliez finish (); dans l'événement de bouton de clic afin que l'activité principale soit fermée juste après avoir 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 il n'y a pas d'activité active.
la source
sur la méthode onCreate de votre activité, écrivez le code suivant.
Remplacez ensuite la méthode sélectionnée onOptionsItem de votre activité comme suit
Et vous êtes prêt à partir.
la source
Vous devez l'utiliser dans votre MainActivity
Le drapeau lancera plusieurs tâches qui conserveront votre MainActivity, lorsque vous appellerez finish, il tuera l'autre activité et vous ramènera à MainActivity
la source