71 votes

Comment puis-je démarrer une activité à partir d'une classe sans activité ?

J'ai une activité en vue de la carte qui présente quelques OverlayItems . Dans le onTap d'une superposition, je veux déclencher une nouvelle activité qui montre cette photo superposée en plein écran, par exemple.

Quand je fais ça dans ma classe de superposition :

Intent intent = new Intent();
intent.setClass(getApplicationContext, FullscreenView.class);
startActivity(intent);

il ne peut pas trouver de contexte d'application, car je ne suis pas dans la portée d'une activité.

Lorsque j'ajoute une méthode à mon activité principale, par exemple startFullscreen :

public static void startFullscreen() {
    if (sCurrentPhoto != null) {
        Intent intent = new Intent();
        intent.setClass(getApplicationContext(), FullscreenView.class);
        startActivity(intent);          
    }
}

Je ne peux pas appeler getApplicationContext() y startActivity() parce que je suis dans un contexte statique. J'ai cependant besoin de la méthode statique pour l'appeler dans la classe Overlay, par exemple MainView.startFullscreen() .

En clair : Comment puis-je démarrer une activité à partir d'une classe sans activité ?

88voto

Exile Points 1425

Une fois que vous avez obtenu le contexte dans votre onTap() vous pouvez également faire :

Intent myIntent = new Intent(mContext, theNewActivity.class);
mContext.startActivity(myIntent);

40voto

Daniel Trebbien Points 18089

Votre onTap reçoit le MapView à partir duquel vous pouvez obtenir le Context :

@Override
public boolean onTap(GeoPoint p, MapView mapView)
{
    // ...

    Intent intent = new Intent();
    intent.setClass(mapView.getContext(), FullscreenView.class);
    startActivity(intent);

    // ...
}

12voto

Some Noob Student Points 2832

Je ne sais pas si c'est une bonne pratique ou pas, mais casting a Context object to an Activity object compiles fine.

Essayez ça : ((Activity) mContext).startActivity(...)

9voto

Has AlTaiar Points 1004

Vous pouvez définir un context pour votre application, dites ExampleContext qui contiendra le contexte de votre application et l'utilisera ensuite pour instancier une activité comme celle-ci :

var intent = new Intent(Application.ApplicationContext, typeof(Activity2));
intent.AddFlags(ActivityFlags.NewTask);
Application.ApplicationContext.StartActivity(intent);

Veuillez garder à l'esprit que ce code est écrit en format C# car j'utilise MonoDroid, mais je pense qu'il est très similaire à Java . Pour savoir comment créer un ApplicationContext regardez ceci filetage

C'est comme ça que j'ai fait mon Application Class

    [Application]
    public class Application : Android.App.Application, IApplication
    {
        public Application(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer)
        {

        }
        public object MyObject { get; set; }
    }

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