Как я могу запустить Activity из класса non-Activity?

У меня есть активность отображения карты, которая показывает несколько OverlayItems . В методе onTap наложения я хочу вызвать новое действие, которое показывает эту фотографию наложения как полноэкранный режим, например.

Когда я делаю это внутри своего класса наложения:

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

.. он не может найти контекст приложения, поскольку я не занимаюсь деятельностью.

Когда я добавлю метод в свою основную деятельность, скажем, startFullscreen :

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

Я не могу вызвать getApplicationContext() и startActivity() , потому что я в статическом контексте. Однако мне нужен статический метод, чтобы вызвать его в классе Overlay, например MainView.startFullscreen() .

Проще говоря: как я могу запустить Activity из класса non-Activity?

Solutions Collecting From Web of "Как я могу запустить Activity из класса non-Activity?"

onTap переопределении onTap получаете MapView из которого вы можете получить Context :

 @Override public boolean onTap(GeoPoint p, MapView mapView) { // ... Intent intent = new Intent(); intent.setClass(mapView.getContext(), FullscreenView.class); startActivity(intent); // ... } 

После того, как вы получили контекст в своем onTap (), вы также можете:

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

Я не знаю, является ли это хорошей практикой или нет, но casting a Context object to an Activity object compiles fine.

Попробуйте следующее: ((Activity) mContext).startActivity(...)

Вы можете определить context для своего приложения, например, ExampleContext который будет содержать контекст вашего приложения, а затем использовать его для создания экземпляра такого действия:

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

Пожалуйста, имейте в виду, что этот код написан на C# поскольку я использую MonoDroid, но я считаю, что он очень похож на Java . Для того, чтобы создать ApplicationContext посмотрите на этот поток

Вот как я сделал свой Application Class

  [Application] public class Application : Android.App.Application, IApplication { public Application(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer) { } public object MyObject { get; set; } }