如何从非 Activity 类启动 Activity?

问题描述 投票:0回答:5

我有一个地图视图活动,显示了一些

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 类启动 Activity?

android android-activity android-intent
5个回答
97
投票

一旦您在 onTap() 中获得了上下文,您还可以执行以下操作:

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

42
投票

您的

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

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

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

    // ...
}

14
投票

我不知道这是否是一个好的做法,但是

casting a Context object to an Activity object compiles fine.

试试这个:

((Activity) mContext).startActivity(...)


9
投票

您可以为您的应用程序定义一个

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

0
投票
  Context context = App.instance().getApplicationContext();
    Intent intent = new Intent();
    intent.setClass(context, MyActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    App.instance().startActivity(intent);
© www.soinside.com 2019 - 2024. All rights reserved.