Как по событию OnDismiss диалога изменять переменную во фрагменте
Есть cardview по нажатию на который открывается диалог. Столкнулся с проблемой, что при быстром нажатии открывается 2 диалога. Поискав нашел способ, присвоив cardview.iseneble = false, и после onDismiss в диалоге ставить значение true. Пытался реализовать DialogInterface.OnDismissListener { cardView1.isEnabled = true } , но cardview так и оставалось false.
Как по событию onDismiss изменить на true?
when (tag){
"bottomSheepFragment" -> {
cardView1.setOnClickListener {
cardView1.isEnabled = false
DialogFragment.show((activity as AppCompatActivity).supportFragmentManager, "1")
DialogInterface.OnDismissListener { cardView1.isEnabled = true }
}
Ответы (1 шт):
Если диалог в фрагменте то можно при закрытии фрагмента вызывать onActivityResult:
val intent = Intent()
intent.putExtra("close", true)
targetFragment!!.onActivityResult(0, Activity.RESULT_OK, intent)
Objects.requireNonNull<FragmentManager>(fragmentManager).beginTransaction().remove(this).commitAllowingStateLoss()
и ловить в фрагменте:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
when (requestCode) {
0 -> {
if (resultCode == Activity.RESULT_OK) {
if (data != null) {
cardView1.isEnabled = true
}
}
}
}
}
Так же есть вариант - активировать виджет через некоторое время. Добавить таймер и по истечению времени просто активировать виджет.Так же у диалога есть такой метод который отслеживает показ:
DialogInterface.OnShowListener { }
То есть когда диалог будет показан то можно будет активировать виджет. Я допускаю что ваш метод скрывания диалога не работает из-за того что ему нечего перехватывать. Так же в активности можно использовать onActivityResult