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é?
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);
// ...
}
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);
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(...)
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; }
}