ボクココ

個人開発に関するテックブログ

Android で Context を渡さなくても getString やShared Preference を使えるようにする

Android で毎回お世話になるのが Context. 今回素晴らしい発見をしたので書いておく。

Context とは

アプリケーションの情報を持つオブジェクトのようなものだ。これには Activity Context と Application Context の2つがあるのだけど、Activity Context は例えばAlertDialog などに渡さなきゃいけない。そうしないと例外が起きる。反対にApplication Context はres にあるxml情報を取って来る getResource() だったり、SharedPreference を作る。 Activity Context は Application Context の派生なので、 Application Context でできることは Activity Context でもできる。 さて、このContextだが、毎回Activity から別クラスに渡すときに引数でContextを渡してた。そうじゃないと文字やSharedPrefrenceにアクセスできなかったからだ。だがApplication Contextを取ってこれさえすれば別にcontextを渡す必要はない。

Application Context をどこからでも取って来れるようにする

そのためには自作Application クラスを作り、そのオブジェクトをシングルトン化すればいいのだ。

public class ApplicationController extends Application {
    private static ApplicationController sInstance;

    @Override
    public void onCreate() {
        super.onCreate();
        sInstance = this;
    }

    public static synchronized ApplicationController getInstance() {
        return sInstance;
    }
}

こうするとなんと、どのクラスからでも ApplicationController.getInstance().getApplicationContext() でContextを取って来れる! これは自分に取ってはかなり画期的な発見で、今までのAndroid開発スタイルがガラリと変わった。 てことでくすればコードがちょっとは簡潔になるんじゃないだろうか。