我正在尝试将其构造函数中需要活动上下文的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而不是注入它。 ...
这里的设计中存在一个缺陷,甚至与DI或Dagger无关:这是您的DialogUtils
类将使用普通的AlertDialog
而不是DialogFragment
。这意味着您的班级生成的对话框不会在屏幕上持续显示(例如,在活动重启时(例如设备旋转时)),这会带来糟糕的用户体验。
您可以将LoginActivity
(以及所有其他绑定)作为Context
绑定到模块中,然后将该模块添加到用于注入Activity的组件中。然后,您的utils可以毫无问题地注入/使用Context
。