Как предложил Абхинав, вы не должны создавать экземпляр Dialog напрямую. Для меня лучше всего сработало создание класса, расширяющего DialogFragment . Таким образом, когда я создаю экземпляр класса, мне нужно только вызвать метод show()
.
Пример в Kotlin:
class UnsavedChangesDialogFragment(private val listener: DialogInteractions) : DialogFragment() {
interface DialogInteractions {
fun onPositiveBtnPressed()
fun onNegativeBtnPressed()
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let {
val builder = AlertDialog.Builder(it)
builder
.setMessage(R.string.changes_dialog_title)
.setPositiveButton(R.string.changes_dialog_continue) { _, _ ->
listener.onPositiveBtnPressed()
}
.setNegativeButton(R.string.changes_dialog_back) {_, _ ->
listener.onNegativeBtnPressed()
dismiss()
}
builder.create()
} ?: throw IllegalStateException("Activity cannot be null")
}
}
Вы можете легко решить, что произойдет после нажатия положительной или отрицательной кнопки добавлением интерфейса. Таким образом, каждый фрагмент, в котором будет использоваться диалоговое окно, может выполнять различные действия после взаимодействия пользователя с диалоговым окном.