web-dev-qa-db-fra.com

Reprendre l'activité au lieu de démarrer si existe déjà dans la pile arrière

J'ai un Activity_1 Après de nombreuses étapes, disons

Activity_2>Activity_3 .... dans certains Activity_n Je modifie certaines données relatives à Activity_1 Et je l'appelle en utilisant

Intent intent = new Intent(Activity_n.this, Activity_1.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

Pour rafraîchir le contenu. Mais plus tard, je peux remonter jusqu'à Activity_1 Où j'ai commencé, qui contient d'anciennes données.

Au lieu de cela, je veux que la onResume() initiale de Activity_1 Soit appelée, en utilisant le code ci-dessus. Ou approprié Flag

FLAG_ACTIVITY_CLEAR_TOP

considérons une tâche composée des activités: A, B, C, D. Si D appelle startActivity () avec une intention qui se résout en composante de l'activité B, alors C et D seront terminés et B recevra l'intention donnée, résultant en la pile étant maintenant: A, B.

C'est ce que disent les docs, mais pas ce que je reçois.

30
Archie.bpgc

Vous pouvez ajouter ces deux lignes et essayer

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Écrivez ceci dans votre fichier manifeste dans l'activité

<activity
     Android:name=".SettingsActivity"
     Android:launchMode="singleInstance"
     Android:screenOrientation="portrait" >
</activity>

Les activités "singleTask" et "singleInstance" ne peuvent commencer qu'une tâche. Ils sont toujours à la racine de la pile d'activités. De plus, l'appareil ne peut contenir qu'une seule instance de l'activité à la fois - une seule de ces tâches.

Vous pouvez utiliser SingleTask ou SingleInstance

"singleTask" - Le système crée l'activité à la racine d'une nouvelle tâche et achemine l'intention vers celle-ci. Cependant, si une instance de l'activité existe déjà, le système achemine l'intention vers l'instance existante via un appel à sa méthode onNewIntent (), plutôt que d'en créer une nouvelle.

"singleInstance" - Identique à "singleTask", sauf que le système ne lance aucune autre activité dans la tâche contenant l'instance. L'activité est toujours le seul et unique membre de sa tâche.

Reportez-vous à ce lien http://developer.Android.com/guide/topics/manifest/activity-element.html

39
Nirali
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

Visitez: http://developer.Android.com/reference/Android/content/Intent.html#FLAG_ACTIVITY_REORDER_TO_FRONT

14
Nhut Chau Minh

Reprendre Activity à partir de backstack s'il existe ou en créer un nouveau sinon

Android:launchMode="singleTask"

ajoutez cette ligne au fichier AndroidManifest.xml de votre application et démarrez l'activité avec un Intent normal.

8
AhmedNTS