Comment ouvrir une activité à partir d'une classe java exécutant une activité séparée?


OK, j'ai donc une activité qui commence au lancement (Activité Un) Cette activité exécute deux autres activités (Activité Deux et Activité Trois) qui exécutent chacune des classes java puis se chargent dans une autre activité (Activité Quatre) lors d'un événement tactile. L'activité Quatre ouvre alors la classe principale. Toutes ces pièces fonctionnent exactement comme elles le devraient.

La pièce avec laquelle j'ai des problèmes commence une nouvelle activité (Activité Cinq) à partir de la Classe principale et de l'Activité Quatre. J'ai mes intentions, mon fichier de mise en page XML et mon manifeste créé correctement. C'est là que ça devient bizarre pour moi...

1) Si je mets l'activité Cinq pour démarrer sur l'événement tactile, cela fonctionne très bien (mes événements tactiles sont dans un cas de commutateur. Cela fonctionne si je le mets dans la classe Principale qui enregistre les événements tactiles ou l'activité Quatre qui gère les événements tactiles pour la classe principale).

2) Si je mets une instruction if dans l'événement tactile, elle échoue sans erreur (le gestionnaire agit comme si l'événement ne se produisait jamais), sauf si je mets l'activité Cinq pour démarrer dans chaque instruction" if" (c'est la même chose si j'utilise simplement "if" ou plusieurs instructions "if" non imbriquées ou "if/else if". Le résultat est toujours le même, le gestionnaire agit comme si aucun événement tactile ne s'était produit à moins que toutes les instructions if ne démarrent l'activité Cinq).

3) Si je mets l'activité Cinq pour démarrer n'importe où ailleurs dans n'importe quelle Activité ou la Classe principale avec n'importe quel paramètre, j'obtiens une erreur disant que je ne peux pas démarrer l'activité à partir d'un gestionnaire sans Looper.préparer(). Si je mets Looper.prepare() dans la méthode intent call il se trompe alors en disant l'exception de pointeur null à mon appel startActivity(ActivityFive).

Laissez-moi essayer d'être 100% clair ici...

Je ne change pas du tout l'appel d'intention ou l'appel startActivity (). La seule chose que je change est l'emplacement et les qualificatifs environnants (déclarations if). Pour une raison quelconque, l'appel startActivity ne fonctionne que si je le mets dans un événement tactile et démarre l'activité, quel que soit le qualificatif enregistré comme vrai.

Mes autres activités sont toutes commencées par le toucher événements ou flux automatique fluide entre eux.

L'activité Cinq doit être lancée par:

1) Instruction If en dehors du gestionnaire d'événement tactile:

  if (object1.isGone)
  {

      ...

      ActivityFour aFour = new ActivityFour();
      Intent aFive = new Intent (afour, ActivityFive.class)
      aFour.startActivity(aFive);

  }

  if (!object1.isGone)
  {

      (do nothing)

  }

2) Ou instruction if dans un gestionnaire d'événement tactile:

  switch (screen.touchAction)
  {

      case screen.touch_Middle:

           if (object1.isGone)
           {

                ...
                ActivityFour aFour = new ActivityFour();
                Intent aFive = new Intent (afour, ActivityFive.class)
                aFour.startActivity(aFive);

           }

           if (!object1.isGone)
           {

               (do nothing)

           }

        break;

Merci pour votre aide et je serai sûr de +1 et de vérifier la réponse qui résout cette folie.

Author: ProgrammerInTraining, 2014-05-13

1 answers

, Vous avez ceci:

  ActivityFour aFour = new ActivityFour();
  Intent aFive = new Intent (afour, ActivityFive.class)
  aFour.startActivity(aFive);

Vous absolument positivement ne pouvez pas créer une instance d'un Activity en utilisant new! Seul le framework Android peut créer des instances de composants Android (activité, service, récepteur de diffusion, fournisseur de contenu). Cela est dû à la façon dont ces composants nécessitent le framework Android pour configurer le Context correct lors de l'instanciation.

Si vous voulez juste démarrer un Activity à partir de MainClass, vous devrez passer une instance Context à MainClass soit lorsque vous créez l'instance de MainClass ou quelque temps plus tard avec une méthode set...() avant de l'utiliser. Ensuite, lorsque vous souhaitez démarrer un Activity, vous pouvez faire ceci:

Intent aFive = new Intent (afour, ActivityFive.class)
context.startActivity(aFive);

Le Context peut être un Activity (qui hérite de Context) ou il peut être le mondial de contexte de l'application que vous pouvez obtenir dans un Activity utiliser getApplicationContext().

 0
Author: David Wasser, 2014-05-13 17:02:52