いくつかの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()
のようなOverlayクラスで呼び出すには静的メソッドが必要です。
簡単に言えば:非アクティビティクラスからアクティビティを開始するにはどうすればよいですか?
onTap
オーバーライドはMapView
を受け取り、そこからContext
を取得できます。
@Override
public boolean onTap(GeoPoint p, MapView mapView)
{
// ...
Intent intent = new Intent();
intent.setClass(mapView.getContext(), FullscreenView.class);
startActivity(intent);
// ...
}
OnTap()でコンテキストを取得したら、次のこともできます。
Intent myIntent = new Intent(mContext, theNewActivity.class);
mContext.startActivity(myIntent);
これが良い習慣かどうかはわかりませんが、casting a Context object to an Activity object compiles fine.
これを試して: ((Activity) mContext).startActivity(...)
アプリケーションのコンテキストを保持するcontext
というアプリケーションのExampleContext
を定義し、それを使用して次のようなアクティビティをインスタンス化できます。
var intent = new Intent(Application.ApplicationContext, typeof(Activity2));
intent.AddFlags(ActivityFlags.NewTask);
Application.ApplicationContext.StartActivity(intent);
MonoDroidを使用しているため、このコードは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; }
}