有什么方法可以在attachBaseContext()方法中获得意向附加吗?

我正在使用的活动在框架项目中。我需要使用attachBaseContext()方法设置Activity的语言,例如:

@Override
protected void attachBaseContext(Context newBase) {
   super.attachBaseContext(LanguageContextWrapper.wrap(newBase, "en"));
}


我正在使用intent.putExtra()将语言代码字符串发送到Activity。当我尝试在attachBaseContext()中获取更多内容时,它将引发NullPointerException错误。怎么做到呢?谢谢。

最佳答案

TL; DR-据我所知,这是不可能的。

这是因为Android会在附加attachBaseContext后立即调用Activity,如here所示。稍后,将意图设置在Activity类中。

另一种解决方案是将变量存储在您的Application子类中或某种类型的应用程序范围的存储库中。

例如,

@Overrideprotected void attachBaseContext(Context newBase) { String someLanguage = ((MyApplication)newBase.getApplicationContext()).getAppLanguage(); super.attachBaseContext(LanguageContextWrapper.wrap(newBase, someLanguage));}

您可以轻松地对此进行调整,以使用带有Dagger甚至SharedPreferences的存储库模式。

10-08 17:43