gpt4 book ai didi

android - “dagger-android” 库,如何注入(inject)Dialog类的属性?

转载 作者:行者123 更新时间:2023-12-02 12:42:45 25 4
gpt4 key购买 nike

我遵循了声称这是更好的“新方法”的示例。 (https://proandroiddev.com/exploring-the-new-dagger-android-module-9eb6075f1a46) 完整的示例源代码在这里 (https://github.com/jshvarts/DaggerAndroidKotlinSampleApp)。它使用它来向这样的 Activity 注入(inject)属性,

class MainActivity:AppCompatActivity()
{
@Inject
lateinit var something:Something

override fun onCreate(..)
{
AndroidInjection.inject(this)
...

还有一个模块
@Module
abstract class ActivitiesModule
{
@ContributesAndroidInjector
abstract fun bindMainActivity():MainActivity

它运作良好,但自定义 Dialog 怎么样?类(class)?我使用一些自定义参数(仅在运行时用户输入时才知道)创建对话框,如下所示。我可以将 MyDialog 的构造函数修改为 something ,并让 Activity 最终通过 something到 MyDialog 的构造函数。

但这会很难看,因为 Activity 不直接创建 MyDialog。 MainActivity 有一个自定义控件,当单击按钮时,该自定义控件会显示 MyDialog。所以,要使用构造方法,我必须通过 something从MainActivity到自定义控件,然后让自定义控件用 something创建MyDialog .
class MyDialog:Dialog
{
@Inject
lateinit var something:Something

constructor(context:Context?, arg1, args2, args3):super(context)
{
//Cannot call AndroidInjection.inject, because
//it does not take a Dialog.
AndroidInjection.inject(this); //<--Does NOT work.

如果我能告诉 Dagger 在其构造函数中注入(inject) MyDialog 的字段……解决方案是什么?

最佳答案

AndroidInjection 仅适用于 Activity 和 fragment 等类,而不适用于对话框。如果要注入(inject)对话框,请改用对话框 fragment 。或者,因为您实际上可以只调用构造函数,所以使用构造函数注入(inject)而不是 Dagger。

关于android - “dagger-android” 库,如何注入(inject)Dialog类的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50020812/

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