web-dev-qa-db-fra.com

Comment puis-je démarrer une activité à partir d'un cours autre qu'une activité?

J'ai une activité de vue cartographique qui montre quelques OverlayItems. Dans la méthode onTap d'une superposition, je souhaite déclencher une nouvelle activité qui affiche cette photo de superposition en plein écran, par exemple.

Quand je fais cela dans ma classe de superposition:

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

.. il ne peut pas trouver un contexte d'application, car je ne suis pas dans le cadre d'une activité.

Quand j'ajoute une méthode à mon activité principale, disons 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() et startActivity(), car je suis dans un contexte statique. J'ai besoin de la méthode statique cependant pour l'appeler dans la classe Overlay comme MainView.startFullscreen().

En termes simples: Comment puis-je démarrer une activité à partir d'un cours autre qu'une activité?

69
slhck

Votre substitution 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);

    // ...
}
37
Daniel Trebbien

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

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

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

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

11
Some Noob Student

Vous pouvez définir un context pour votre application, par exemple ExampleContext, qui contiendra le contexte de votre application, puis l'utiliser 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 C# comme j'utilise MonoDroid, mais je pense que cela ressemble beaucoup à Java. Pour savoir comment créer un ApplicationContext, regardez ceci thread

Voici comment 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; }
    }
9
Has AlTaiar