83 votes

Comment faire passer une activité au premier plan (en haut de la pile) ?

Dans Android, j'ai défini une activité ExampleActivity.

Lorsque mon application a été lancée, une instance de cette A-Activity a été créée, disons qu'elle est A . Lorsque l'utilisateur clique sur un bouton dans A une autre instance de l'activité B, B, a été créée. La pile de tâches est maintenant B-A, avec B au sommet. Ensuite, l'utilisateur a cliqué sur un bouton de B, une autre instance de l'activité C, et C a été créée. La pile de tâches est maintenant C-B-A, avec C au sommet.

Maintenant, lorsque l'utilisateur clique sur un bouton sur C, je veux que l'application fasse passer A au premier plan, c'est-à-dire que A soit au sommet de la pile de tâches, A-C-B.

Comment puis-je écrire le code pour que cela se produise ?

101voto

Binh Tran Points 1698

Vous pouvez essayer ceci FLAG_ACTIVITY_REORDER_TO_FRONT (le document décrit exactement ce que vous voulez)

60voto

greg7gkb Points 1625

Le meilleur moyen que j'ai trouvé pour y parvenir est d'utiliser la même intention que l'écran d'accueil d'Android - le lanceur d'applications.

Par exemple :

Intent i = new Intent(this, MyMainActivity.class);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);

De cette façon, l'activité de mon paquet qui a été utilisée le plus récemment par l'utilisateur est remise au premier plan. J'ai trouvé cela utile pour utiliser le PendingIntent de mon service afin de ramener l'utilisateur dans mon application.

27voto

arcone Points 3276

Voici un exemple de code qui montre comment vous pouvez le faire :

Intent intent = getIntent(getApplicationContext(), A.class)

Cela permet de s'assurer que vous n'avez qu'une seule instance d'une activité sur la pile.

private static Intent getIntent(Context context, Class<?> cls) {
    Intent intent = new Intent(context, cls);
    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    return intent;
}

4voto

Al. Points 66

Je pense qu'une combinaison de Intent Les drapeaux devraient faire l'affaire. En particulier, Intent.FLAG_ACTIVITY_CLEAR_TOP et Intent.FLAG_ACTIVITY_NEW_TASK .

Ajoutez ces drapeaux à votre intention avant d'appeler startActvity .

1voto

Segfault Points 3311

En général, je pense que cette méthode de gestion des activités n'est pas recommandée. Le problème de réactiver une activité deux pas plus bas dans la pile est que cette activité a probablement été tuée. Mon conseil est de se souvenir de l'état de vos activités et de les lancer avec startActivity ()

Je suis sûr que vous avez vu cette page mais pour à votre convenance ce lien

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