代码之家  ›  专栏  ›  技术社区  ›  slhck

如何从非活动类开始活动?

  •  64
  • slhck  · 技术社区  · 15 年前

    我有一个地图视图活动,显示了一些 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 回复  |  直到 8 年前
        1
  •  36
  •   Daniel Trebbien    15 年前

    你的 onTap 覆盖接收 MapView 从中可以获得 Context :

    @Override
    public boolean onTap(GeoPoint p, MapView mapView)
    {
        // ...
    
        Intent intent = new Intent();
        intent.setClass(mapView.getContext(), FullscreenView.class);
        startActivity(intent);
    
        // ...
    }
    
        2
  •  81
  •   Dipak Keshariya    13 年前

    在ontap()中获取上下文后,还可以执行以下操作:

    Intent myIntent = new Intent(mContext, theNewActivity.class);
    mContext.startActivity(myIntent);
    
        3
  •  10
  •   Some Noob Student    14 年前

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

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

        4
  •  8
  •   Has AlTaiar    13 年前

    您可以定义 context 对于你的申请说 ExampleContext 它将保存应用程序的上下文,然后使用它来实例化这样的活动:

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

    请记住,此代码是用 C# 因为我使用单机器人,但我相信它非常类似于 Java . 如何创建 ApplicationContext 看看这个 thread

    我就是这样做的 Application Class

        [Application]
        public class Application : Android.App.Application, IApplication
        {
            public Application(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer)
            {
    
            }
            public object MyObject { get; set; }
        }