web-dev-qa-db-ja.com

アクティビティ以外のクラスからアクティビティを開始するにはどうすればよいですか?

いくつかの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クラスで呼び出すには静的メソッドが必要です。

簡単に言えば:非アクティビティクラスからアクティビティを開始するにはどうすればよいですか?

69
slhck

onTapオーバーライドはMapViewを受け取り、そこからContextを取得できます。

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

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

    // ...
}
37
Daniel Trebbien

OnTap()でコンテキストを取得したら、次のこともできます。

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

これが良い習慣かどうかはわかりませんが、casting a Context object to an Activity object compiles fine.

これを試して: ((Activity) mContext).startActivity(...)

11

アプリケーションのコンテキストを保持する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; }
    }
9
Has AlTaiar