我如何从一个非Activity类启动一个Activity?

我有一个地图视图活动,显示几个OverlayItems 。 在叠加层的onTap方法中,例如,我想要触发一个新的活动,将此叠加层照片显示为全屏。

当我在覆盖类中执行此操作时:

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

..它不能find一个应用程序的上下文,因为我不在一个活动的范围。

当我添加一个方法到我的主要活动,让我们说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类启动一个Activity?

你的onTap覆盖接收你可以获得ContextMapView

 @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非常相似。 关于如何创build一个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; } }