如何从非活动类启动活动?

我有一个地图视图活动,显示了一些 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())中调用它。

简单地说: 如何从非活动类启动活动?

108787 次浏览

您的 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; }
}