如何从非Activity类启动Activity?

时间:2010-11-28 18:19:40

标签: android android-activity android-intent

我有一个地图视图活动,显示了一些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(),因为我处于静态环境中。我需要静态方法来在覆盖类中调用它,如MainView.startFullscreen()

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

4 个答案:

答案 0 :(得分:81)

一旦你在onTap()中获得了上下文,你也可以这样做:

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

答案 1 :(得分:36)

您的onTap覆盖会收到MapView,您可以从中获取Context

@Override
public boolean onTap(GeoPoint p, MapView mapView)
{
    // ...

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

    // ...
}

答案 2 :(得分:10)

我不知道这是不是好习惯,但是casting a Context object to an Activity object compiles fine.

试试这个:((Activity) mContext).startActivity(...)

答案 3 :(得分:8)

您可以为您的应用程序定义contextExampleContext,它将保存您的应用程序的上下文,然后使用它来实例化这样的活动:

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

请注意,当我使用MonoDroid时,此代码是用C#编写的,但我认为它与Java非常相似。有关如何创建此thread

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