Dagger 2在活动中注入DialogUtils类

问题描述 投票:0回答:2

我正在尝试将其构造函数中需要活动上下文DialogUtils类注入到我的LoginActivity中。下面的代码可以工作,但是我只是初始化DialogUtils而不是注入它。

DialogUtils.kt

class DialogUtils constructor(context: Context) {

    private val dialog: AlertDialog

    init {
        dialog = AlertDialog.Builder(context)
            .setPositiveButton(R.string.ok) { dialog, _ ->
                dialog.dismiss()
            }
            .create()
    }

    fun showDialog(title: String, msg: String) {
        dialog.setTitle(title)
        dialog.setMessage(msg)
        dialog.show()
    }

    fun clear() {
        if (dialog.isShowing) {
            dialog.dismiss()
        }
    }

}

LoginActivity.kt

class LoginActivity : DaggerAppCompatActivity() {

    @Inject
    lateinit var viewModelFactory: ViewModelProvider.Factory
    private val loginViewModel by lazy {
        ViewModelProviders.of(this, viewModelFactory).get(LoginViewModel::class.java)
    }
    private lateinit var dialogUtils: DialogUtils

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)

        dialogUtils = DialogUtils(this)
    }

    override fun onPause() {
        super.onPause()
        dialogUtils.clear()
    }

}

我想在@Inject dialogUtils: DialogUtils中进入LoginActivity,但是为此,我需要活动上下文。请记住在许多活动中都使用DialogUtils,该如何实现这一目标。

我正在尝试将需要其构造函数中的活动上下文的DialogUtils类注入​​到LoginActivity中。下面的代码可以工作,但是我只是初始化DialogUtils而不是注入它。 ...

android kotlin android-alertdialog dagger-2
2个回答
0
投票

这里的设计中存在一个缺陷,甚至与DI或Dagger无关:这是您的DialogUtils类将使用普通的AlertDialog而不是DialogFragment。这意味着您的班级生成的对话框不会在屏幕上持续显示(例如,在活动重启时(例如设备旋转时)),这会带来糟糕的用户体验。


0
投票

您可以将LoginActivity(以及所有其他绑定)作为Context绑定到模块中,然后将该模块添加到用于注入Activity的组件中。然后,您的utils可以毫无问题地注入/使用Context

© www.soinside.com 2019 - 2024. All rights reserved.