2010-07-01 9 views
6

Je me demandais est-il possible de créer plusieurs instances d'une seule activité dans Android?Android - Comment créer plusieurs instances d'une activité?

Je commence actuellement mon propre écran Reçoit pour un test Voip en utilisant le code suivant:


 public void initInCallScreen(String pName, String phoneNumber, int contactID, boolean 
     callDirection, int lineID){ 

    //starts in callScreen dialog 
    final Intent myIntent = new Intent(context, CallDialogActivity.class); 
    myIntent.putExtra("NAME", pName); 
    myIntent.putExtra("NUMBER", phoneNumber); 
    myIntent.putExtra("ID", contactID); 
    myIntent.putExtra("CALLTYPE", callDirection); //True = Incoming, False = Outgoing 
    myIntent.putExtra("LINEID", lineID); 
    myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(myIntent); 

Cela me permet de commencer l'amende d'activité.

Cependant, lorsque je l'appelle pendant une seconde, il retourne simplement à l'activité déjà créée plutôt que de créer une nouvelle activité et de la placer sur la pile.

Je voudrais être en mesure de créer l'activité plusieurs fois pour que j'ai deux ou 3 activités sur la pile et l'utilisateur peut basculer entre eux, en utilisant Accueil, Retour boutons etc ...

Est-ce possible et si oui, qu'est-ce que je fais mal?

+0

Je n'ai pas fait la recherche proprement dite, mais compte tenu de votre description, je suis gu Essayons que 'CallDialogActivity' soit du mode de lancement' single top', auquel cas je ne pense pas que vous puissiez faire grand-chose. Si cela n'a pas été spécifié explicitement, le comportement que vous demandez est le comportement par défaut ... –

+0

Y a-t-il un moyen de vérifier si c'est un single top? –

+0

@DonalRafferty avez-vous réussi à résoudre ce problème ..? –

Répondre

7

Cependant, quand je l'appelle pour une seconde il juste retourne à l'activité déjà créé plutôt que de créer une nouvelle activité et en le plaçant sur la pile.

Vous avez probablement modifié votre manifeste pour ajouter un attribut android:launchMode qui interfère avec votre objectif. Par défaut, le démarrage d'une activité démarre une nouvelle instance.

aussi:

  • Débarrassez-vous de myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);, puisque vous ne voulez pas une nouvelle tâche en fonction de ce que vous avez écrit ici
  • Depuis context est probablement un Context, je ne sais pas pourquoi vous allez à travers tous les trucs ContextWrapper/getBaseContext()
+0

Désolé, déplacer l'ancien code dans un nouveau projet, merci d'indiquer le contexte. Lorsque je supprime myIntent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); J'obtiens l'erreur suivante lors du démarrage de l'activité: AndroidRuntimeException: L'appel de startActivity() depuis l'extérieur d'un contexte d'activité nécessite l'indicateur FLAG_ACTIVITY_NEW_TASK. Est-ce vraiment ce que tu veux? Donc, je ne suis pas sûr mais je pense que j'ai besoin du drapeau FLAG_ACTIVITY_NEW_TASK? De plus, il n'y a aucun paramètre launchMode dans mon manifeste. –

+0

@Donald Rafferty: D'où lancez-vous cela? – CommonsWare

+0

À partir d'un service au sein de la même application. –

3
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
      | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 
      | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
+0

ça marche pour moi –