我如何从一个非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
覆盖接收你可以获得Context
的MapView
:
@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; } }