gpt4 book ai didi

android - 在 super.onCreate() 之前将 Hilt 注入(inject)到 Activity 中

转载 作者:行者123 更新时间:2023-12-04 23:44:58 24 4
gpt4 key购买 nike

我定义了自己的 LayoutInflater.Factory2 类在一个单独的模块中。我想将它注入(inject)到我的应用程序中的每个 Activity 中,但关键是我必须在 Activity 的 之前设置这个工厂super.onCreate() 方法。
当我使用 Hilt 时,它会在 super.onCreate() 之后立即进行注入(inject)。所以我有一个 UninitializedPropertyAccessException。
有没有机会在使用 Hilt 的 super.onCreate 之前进行注入(inject)?
下面是我的模块 di 示例。

@Module
@InstallIn(SingletonComponent::class)
object DynamicThemeModule {
@FlowPreview
@Singleton
@Provides
fun provideDynamicThemeConfigurator(
repository: AttrRepository
): DynamicTheme<AttrInfo> {
return DynamicThemeConfigurator(repository)
}
}

最佳答案

您可以使用 Entry Points 在 onCreate 之前注入(inject)类像这样。

@AndroidEntryPoint
class MainActivity: AppCompatActivity() {

@EntryPoint
@InstallIn(SingletonComponent::class)
interface DynamicThemeFactory {
fun getDynamicTheme() : DynamicTheme<AttrInfo>
}

override fun onCreate(savedInstanceState: Bundle?) {
val factory = EntryPointAccessors.fromApplication(this, DynamicThemeFactory::class.java)
val dynamicTheme = factory.getDynamicTheme()
super.onCreate(savedInstanceState)
}
}
如果您经常需要这样的东西,我建议您在应用程序启动时在 Application 类的伴随对象中创建它的实例( onCreate )。那是在您创建任何 View 之前。所以你不需要一直跳那些箍,而可以访问已经存在的实例。上面的代码在 attachBaseContext 中不可用,当你需要它时,我认为你必须在你的应用程序类中创建它。

关于android - 在 super.onCreate() 之前将 Hilt 注入(inject)到 Activity 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67175054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com