我正在使用匕首,并且必须更新attachBaseContext
的{{1}}中的语言环境,我将LocaleManager内的语言环境更新逻辑保持在本地,当我尝试使用时,LocaleManager实例已经在appModule中这个在AttachBaseContext内的LocaleManager实例我得到了空指针异常
因为该活动的注入发生在activity
内的attachBaseContext
之后。
答案 0 :(得分:0)
这是您正在说的,因为注入是在调用attachBaseContext
之后发生的。
我实际上不确定这里的问题是什么,但是我面临着同样的问题,但是不幸的是我无法用匕首解决它。我需要像这样在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);
}