web-dev-qa-db-fra.com

Comment démarrer une nouvelle activité Android à l'aide d'une chaîne?

J'ai un problème avec une application Android sur laquelle je travaille.

Mon application comporte plusieurs sections et l'écran suivant qui se charge est basé sur une chaîne. Ainsi, l'écran 1 de la section 1 serait, S1S1.

Ma question est, comment puis-je démarrer une activité basée sur une chaîne. J'ai S1S1 enregistré dans une chaîne, appelons-le nextactivity. Plutôt que d'avoir à taper S1S1.class, j'ai besoin que cela vienne de la chaîne. J'ai examiné tout ce que je pouvais et Google n'a pas vraiment aidé.

Certaines choses que j'ai essayées sont

Intent myIntent = new Intent(nextactivity);
Intent myIntent = new Intent(v.getContext(), getClass().getName().valueOf(nextactivity));
Intent myIntent = new Intent(v.getContext(), Class.forName(nextactivity));

et essayé de courir avec

startActivityForResult(myIntent, 0); 

mais rien ne semble fonctionner. Des idées?

28
fahadayaz

Voici un code par lequel vous pouvez démarrer une activité en utilisant le nom de l'activité 

String activityToStart = "com.example.MainActivity";
try {
    Class<?> c = Class.forName(activityToStart);
    Intent intent = new Intent(this, c);
    startActivity(intent);
} catch (ClassNotFoundException ignored) {
}

MODIFIER

Ici, le nom de la classe sera le nom complet de la classe avec le nom du package. Par exemple, si votre nom de package est x.y.z et si vous avez le nom de l'activité appelé A, le nom complet de l'activité A sera x.y.z.A.

61
Dharmendra

Une méthode encore meilleure (et utilisée dans le système pour lancer Browser.apk avec d'autres applications non fournies avec AOSP):

Intent intent = new Intent();
intent.setClassName("com.Android.browser","com.Android.BrowserActivity");

context.startActivity(intent);

Sinon, si vous voulez vérifier que vous pouvez démarrer la Activity à partir de la ligne de commande, vous pouvez faire quelque chose comme ceci depuis votre shell:

adb Shell
am start com.Android.browser/.BrowserActivity
29
Ehtesh Choudhury

Je ne suis pas au courant de la solution, mais j’ai une alternative. De la même manière que div se cache et s’affiche dans les pages Web.

si votre s1s1 doit avoir un contenu bas chargé, placez-le dans une représentation linéaire et conservez sa visibilité lors du chargement du formulaire s1. lorsque vous cliquez sur s1 pour atteindre s1s1, masquez s1 et définissez les paramètres de visibilité sur "visible".

En faisant cela, vous évitez de créer une activité distincte et il est également facile de revenir en arrière.

0
Jana