I have a map view activity that shows a few OverlayItems
. In the onTap
method of an overlay, I want to trigger a new activity that shows this overlay photo as a fullscreen, for example.
When I do this inside my overlay class:
Intent intent = new Intent();
intent.setClass(getApplicationContext, FullscreenView.class);
startActivity(intent);
.. it can't find an application context, as I am not in the scope of an activity.
When I add a method to my main activity, let's say startFullscreen
:
public static void startFullscreen() {
if (sCurrentPhoto != null) {
Intent intent = new Intent();
intent.setClass(getApplicationContext(), FullscreenView.class);
startActivity(intent);
}
}
I can not call getApplicationContext()
and startActivity()
, because I am in a static context. I need the static method however to call it in the Overlay class like MainView.startFullscreen()
.
Put simply: How can I start an Activity from a non-Activity class?
Your onTap
override receives the MapView
from which you can obtain the Context
:
@Override
public boolean onTap(GeoPoint p, MapView mapView)
{
// ...
Intent intent = new Intent();
intent.setClass(mapView.getContext(), FullscreenView.class);
startActivity(intent);
// ...
}
Once you have obtained the context in your onTap() you can also do:
Intent myIntent = new Intent(mContext, theNewActivity.class);
mContext.startActivity(myIntent);
I don't know if this is good practice or not, but casting a Context object to an Activity object compiles fine.
Try this: ((Activity) mContext).startActivity(...)
You can define a context
for your application say ExampleContext
which will hold the context of your application and then use it to instantiate an activity like this:
var intent = new Intent(Application.ApplicationContext, typeof(Activity2));
intent.AddFlags(ActivityFlags.NewTask);
Application.ApplicationContext.StartActivity(intent);
Please bear in mind that this code is written in C#
as I use MonoDroid, but I believe it is very similar to Java
. For how to create an ApplicationContext
look at this thread
This is how I made my Application Class
[Application]
public class Application : Android.App.Application, IApplication
{
public Application(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer)
{
}
public object MyObject { get; set; }
}