У меня проблема с AlertDialog: если я хочу завершить текущее действие после того, как открываю новое, у меня происходит сбой со следующей ошибкой:
E/WindowManager: android.view.WindowLeaked: Activity com.myapp.ShowsActivity has leaked window DecorView@2435213[ShowsActivity] that was originally added here
Это происходит, когда я хочу выйти из системы. Метод AuthLogic.logout () вызывается (я экспортировал его в отдельный класс, чтобы иметь более читаемый код), который вызывает «Вы уверены?»диалоговое окно оповещения, которое затем перенаправляет на вход в систему. Логика кнопки выхода из системы:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_shows)
// some code . . .
btnLogout.setOnClickListener {
AuthLogic.logout(this)
finish() // *1
}
}
AuthLogic.logout ():
fun logout(context: Context) {
val builder = AlertDialog.Builder(context)
builder.setTitle(R.string.are_you_sure)
builder.setMessage(R.string.confirm_msg_logout)
builder.setPositiveButton(R.string.confirm) { dialogInterface: DialogInterface, i: Int ->
// aditional logout logic
context.startActivity(AuthActivity.newStartIntent(context))
}
builder.setNegativeButton(R.string.cancel) { di: DialogInterface, _: Int -> }
builder.show()
}
Я заметил, что ошибка появляется, если я заканчиваю свою работу над * 1 комментарием. Если я удаляю эту строку, ошибка не отображается, но это вызывает проблему, потому что я могу вернуться к предыдущему действию и не хочу этого. Я уже пытался использовать dialogInterface.dismiss()
на setPositiveButton
лямбда-метод, но безуспешно. Есть идеи?
РЕДАКТИРОВАТЬ! решено!:)
Я переписал AuthLogic.logout ():
fun logout(context: Context) {
val builder = AlertDialog.Builder(context)
builder.setTitle(R.string.are_you_sure)
builder.setMessage(R.string.confirm_msg_logout)
builder.setPositiveButton(R.string.confirm) { dialogInterface: DialogInterface, i: Int ->
// logout logic ...
dialogInterface.dismiss()
context.startActivity(AuthActivity.newStartIntent(context))
(context as Activity).finish()
}
builder.setNegativeButton(R.string.cancel) { di: DialogInterface, _: Int -> }
builder.show()
}
и удалил строку финиша (), видимую на * 1. Спасибо @Johan Kovalski за подсказку.