Ich habe eine Kartenansicht, die einige zeigt OverlayItems
. Bei der onTap
Methode einer Überlagerung möchte ich eine neue Aktivität auslösen, die dieses Überlagerungsfoto 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 nicht anrufen getApplicationContext()
und startActivity()
, weil ich mich in einem statischen Kontext befinde. Ich brauche die statische Methode jedoch, um sie in der Overlay-Klasse wie aufzurufen MainView.startFullscreen()
.
Einfach ausgedrückt: Wie kann ich eine Aktivität von einer Nicht-Aktivitätsklasse aus starten?
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
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);
quelle
Ich weiß nicht, ob dies eine gute Praxis ist oder nicht, aber
casting a Context object to an Activity object compiles fine.
Versuche dies:
((Activity) mContext).startActivity(...)
quelle
Sie können
context
für Ihre Anwendung ein Sprichwort definieren ,ExampleContext
das den Kontext Ihrer Anwendung enthält, und es dann verwenden, um eine Aktivität wie diese 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 geschrieben ist,
C#
wenn ich MonoDroid verwende, aber ich glaube, dass er sehr ähnlich istJava
. So erstellen Sie einenApplicationContext
Blick auf diesen ThreadSo habe ich meine gemacht
Application Class
[Application] public class Application : Android.App.Application, IApplication { public Application(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer) { } public object MyObject { get; set; } }
quelle