3

新しいアクティビティを開始する必要がある非アクティビティ クラスがあります。現在、現在のコンテキストをパラメーターとして渡すだけですが、可能であればコンテキストに静的にアクセスしたいと考えています。新しいアプリケーションとメイン アプリケーションの両方として、新しいアプリケーション (MyApplication extends Application) を作成しようとしましたが、どちらも機能しませんでした。助言がありますか?

現在のコード:

public class SharedFunctions {
    public static void doSomething(Context context){
        Intent i = new Intent(context, NextActivity.class);
        context.startActivity(i);
    }
}
4

2 に答える 2

3

これを行うためのよりクリーンな方法は、各メソッドに Context を渡すことです。タイピングが増えますが、参照をリークしていないことを確認するのに役立ちます。

もちろん、それへの静的参照が本当に必要な場合は、SharedFunctions クラスに静的メンバーを保持し、それを各アクティビティに設定することができます。

onResume()設定/クリアするのにonPause()適した場所かもしれませんが、必要に応じて変更したい場合があります。古いアクティビティへの参照を保持しないようにしてください。

public class SharedFunctions{
    private static Context context;

    public static void setContext(Context ctx){
        context = ctx;
    }

    public static void doSomething(){
        context.someContextFunction();
    }

}

各アクティビティで:

protected void onResume(){
    SharedFunctions.setContext(this);
}

protected void onPause(){
    SharedFunctions.setContext(null);
}
于 2013-07-19T15:13:29.437 に答える
1

このクラスを作成します。

public class MyApplication
    extends Application
{
    private static Context context;

    @Override
    public void onCreate()
    {
        super.onCreate();
        context = getApplicationContext();
    }

    public static Context getContext()
    {
        return context;
    }
}

その後、このクラスをアプリケーションのフィールド名に追加する必要があります (マニフェスト)

<application
     android:name="yourPackageName.MyApplication"
     ........
</application >

その結果、アプリケーション内の任意の場所で MyApplication.getContext() を呼び出して、コンテキストを取得できます。

願っています、私はあなたを助けます。

于 2013-07-19T14:03:39.113 に答える