Context メモ
Android にはいくつかの Context がある。
Activity から参照可能なのは:
- this : Acrivity
- getBaseContext() : ContextImpl
- getApplicationContext() : Applicaiton
となる。
Activity を Context として持ちまわるのは、Activity のリークにつながるので、getApplicationContext() で取得した Application を持ちまわる、というのが慣習になっていると思っていたが、Application だと問題が発生することがある。
具体的に遭遇した問題は:
View view = inflate(context, R.layout.sample, null);
addView(view);
という具合に、inflate を用いて View を生成する際に使用する Context が Application だった場合、生成された View にアプリのテーマが適切に設定されず、EditText の背景が不正になることがあった。
getBaseContext() で取得した ContextImpl を使用した場合は適切なテーマが設定されたため、これがワークアラウンドなんだと思う。