我需要在 Activity 的SharedPreferences
中访问我的attachBaseContext
实例(以便在此处设置语言环境),但是注入(inject)的SharedPreferences
实例在那里不可用,因为在onCreate
方法中进行注入(inject),该方法在attachBaseContext
调用之后运行。我正在使用dagger2进行依赖注入(inject)。
知道如何避免创建新的SharedPreferences
实例吗?
编辑:
好的,所以我认为问题是我试图过多使用 Dagger ,我认为在这种情况下它根本不合适。在每个 Activity 的attachBaseContext
中,我必须更新语言环境,并将此更新逻辑提取到LocaleManager
,该SharedPreferences
需要访问Context
实例和在attachBaseContext
中获得的SharedPreferences
。 AppModule
实例已经在@Inject
中,但是我仍然无法在attachBaseContext
调用之前将它attachBaseContext
编码到 Activity 中,因为 Activity 的注入(inject)发生在ojit_code之后。
最佳答案
只要您可以访问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)
}
}