我需要在我的活动的SharedPreferences
中访问我的attachBaseContext
实例(所以我可以在那里设置语言环境),但注入的SharedPreferences
实例在那里不可用作为注入正在onCreate
方法中进行,该方法在attachBaseContext
调用之后运行。我使用dagger2进行依赖注入。
知道如何避免创建新的SharedPreferences
实例吗?
编辑:
好的,所以我认为问题在于我试图使用匕首太多,我认为在这种情况下它根本不适合。在每项活动的attachBaseContext
中,我必须更新区域设置,并将此更新逻辑提取到LocaleManager
,需要访问SharedPreferences
实例和我Context
进入attachBaseContext
。 SharedPreferences
实例已经在AppModule
中,但我仍然无法@Inject
attachBaseContext
之前的活动,因为活动的注入发生在{{1}之后}}
答案 0 :(得分:-1)
只要您可以访问Component
,就可以添加provision method
@Singleton
@Component(modules = [AppModule::class])
interface AppComponent {
fun inject(myActivity: MyActivity)
fun sharedPreferences(): SharedPreferences
...
}
然后通过SharedPreferences
直接访问Component
:
class MyActivity : AppCompatActivity() {
override fun attachBaseContext(newBase: Context) {
val sharedPreferences = component.sharedPreferences()
...
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
component.inject(this)
}
}