16

カスタム ビューを作成しましたが、ハンドラ関連の操作を実行するにはアクティビティ参照が必要です。getContext()は Context を取得する方法であると考えていますが、Activity 参照を取得する方法はありますか?

4

4 に答える 4

26

View が Activity コンテキストから呼び出されない場合、getContext() を Activity にキャストしても (例: (Activity)getContext();)、必ずしも Activity オブジェクトが返されるとは限りません。

そのためには、

    public Activity getActivity() {
        Context context = getContext();
        while (context instanceof ContextWrapper) {
            if (context instanceof Activity) {
                return (Activity)context;
            }
            context = ((ContextWrapper)context).getBaseContext();
        }
        return null;
    }

「while」は、アクティビティが見つかるまですべてのベース コンテキストをバブル アップするか、ルート コンテキストが見つかったときにループを終了するために使用されます。ルート コンテキストの baseContext が null になり、ループが終了します。

于 2016-07-07T10:53:32.570 に答える
1

このように View クラスのコンストラクターでコンテキストを渡します

クラスを見る

public class DrawView extends View {

    Context actContext;

    public DrawView(Context context) {
        super(context);

        actContext=context;
    }
}

そしてあなたの活動クラスで

DrawView drawView=new DrawView(this);
于 2013-10-25T09:05:45.977 に答える
0

オブジェクトを定義するときにハンドラーのコンストラクターでアクティビティのコンテキストを送信することにより、アクティビティー参照を取得できます。ハンドラー クラスでのコンストラクター定義は以下のように定義されています。

private Context mContext;
public MyHandler(Context context) {
    mContext=context;
}

メインのアクティビティ クラスでは、次のようにオブジェクトを作成できます。

MyHandler ca=new MyHandler(MainActivity.this);
于 2013-10-25T09:16:21.487 に答える