我正在使用 dagger,我必须更新 attachBaseContext
的 activity
中的区域设置,我将区域设置更新逻辑保留在 LocaleManager 中,LocaleManager 实例已经在 appModule 中,当我尝试在 attachBaseContext 中使用此 LocaleManager 实例时,我得到空指针异常
因为 Activity 的注入(inject)发生在 attachBaseContext
内的 onCreate()
之后。
最佳答案
正如您所说,这种情况正在发生,因为注入(inject)是在调用 attachBaseContext
之后发生的。
我实际上不确定这里的问题是什么,但我面临着同样的问题,但不幸的是我无法用 dagger 解决它。我需要在 LocaleManager
中创建一个新的 attachBaseContext
,如下所示:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(new LocaleManager(base).updateContext());
}
其中
updateContext
返回具有更新区域设置的上下文,如下所示:public Context updateContext() {
Locale locale = new Locale(DESIRED_LANGUAGECODE);
Locale.setDefault(locale);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return updateResourcesLocale(locale);
}
return updateResourcesLocaleLegacy(locale);
}
@SuppressWarnings("deprecation")
private Context updateResourcesLocaleLegacy(Locale locale) {
Resources resources = mContext.getResources();
Configuration configuration = resources.getConfiguration();
configuration.locale = locale;
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
return mContext;
}
@TargetApi(Build.VERSION_CODES.N)
private Context updateResourcesLocale(Locale locale) {
Configuration configuration = mContext.getResources().getConfiguration();
configuration.setLocale(locale);
return mContext.createConfigurationContext(configuration);
}
关于android - 无法在 attachBaseContext() 中使用 dagger-injected 对象来更新语言环境,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53277662/