it-swarm.com.de

Wie kann ich eine Aktivität aus einer Nicht-Aktivitätsklasse starten?

Ich habe eine Kartenansicht-Aktivität, in der einige OverlayItems angezeigt werden. In der onTap -Methode eines Overlays möchte ich eine neue Aktivität auslösen, die dieses Overlay-Foto beispielsweise als Vollbild anzeigt.

Wenn ich das in meiner Overlay-Klasse mache:

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

Es kann keinen Anwendungskontext finden, da ich nicht im Rahmen einer Aktivität bin.

Wenn ich meiner Hauptaktivität eine Methode hinzufüge, sagen wir startFullscreen:

public static void startFullscreen() {
    if (sCurrentPhoto != null) {
        Intent intent = new Intent();
        intent.setClass(getApplicationContext(), FullscreenView.class);
        startActivity(intent);          
    }
}

Ich kann getApplicationContext() und startActivity() nicht aufrufen, da ich mich in einem statischen Kontext befinde. Ich brauche jedoch die statische Methode, um sie in der Overlay-Klasse wie MainView.startFullscreen() aufzurufen.

Einfach ausgedrückt: Wie kann ich eine Aktivität aus einer Nicht-Aktivitätsklasse starten?

69
slhck

Ihr onTap Override erhält das MapView, von dem Sie das Context erhalten können:

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

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

    // ...
}
37
Daniel Trebbien

Sobald Sie den Kontext in Ihrem onTap () erhalten haben, können Sie auch Folgendes tun:

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

Ich weiß nicht, ob dies eine gute Übung ist oder nicht, aber casting a Context object to an Activity object compiles fine.

Versuche dies: ((Activity) mContext).startActivity(...)

11

Sie können ein context für Ihre Anwendung definieren, z. B. ExampleContext, das den Kontext Ihrer Anwendung enthält und dann verwendet wird, um eine Aktivität wie die folgende zu instanziieren:

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

Bitte denken Sie daran, dass dieser Code in C# Geschrieben ist, da ich MonoDroid verwende, aber ich glaube, dass er Java sehr ähnlich ist. Wie man ein ApplicationContext erstellt, sehen Sie in diesem thread

So habe ich meinen Application Class

    [Application]
    public class Application : Android.App.Application, IApplication
    {
        public Application(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer)
        {

        }
        public object MyObject { get; set; }
    }
9
Has AlTaiar