Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在AlertDialog操作引发错误后完成当前活动_Android_Android Studio_Kotlin_Android Alertdialog - Fatal编程技术网

Android 在AlertDialog操作引发错误后完成当前活动

Android 在AlertDialog操作引发错误后完成当前活动,android,android-studio,kotlin,android-alertdialog,Android,Android Studio,Kotlin,Android Alertdialog,AlertDialog有问题:如果我想在打开新活动后完成当前活动,我会因以下错误崩溃: E/WindowManager:android.view.WindowLeaked:Activity com.myapp.ShowsActivity已泄漏窗口DecorView@2435213最初添加到此处的[ShowsActivity] 当我想注销用户时会发生这种情况。调用AuthLogic.logout()方法(我将其导出到一个独立类以获得更可读的代码),这会触发一个“确定吗?”警报对话框,然后重定向到登

AlertDialog有问题:如果我想在打开新活动后完成当前活动,我会因以下错误崩溃:

E/WindowManager:android.view.WindowLeaked:Activity com.myapp.ShowsActivity已泄漏窗口DecorView@2435213最初添加到此处的[ShowsActivity]

当我想注销用户时会发生这种情况。调用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():

我注意到,如果我在*1评论上完成活动,就会弹出错误。如果我删除该行,则不会显示错误,但这会导致问题,因为我可以返回到上一个活动,我不希望这样。我已经尝试在
setPositiveButton
lambda方法上使用
dialogInterface.dismise()
,但没有成功。有什么想法吗

编辑!已解决!:)

我重写了AuthLogic.logout():

并删除了*1上的finish()线。
感谢@Johan Kovalski提供的提示。

在完成活动之前,尝试关闭警报对话框


yourAlertDialog.dimis()

对话框
窗口
是通过活动
上下文
创建的<代码>活动必须清理其拥有的窗口。您应该先销毁对话框,然后销毁活动。或者使用
对话框片段


您在问题中提到的日志告诉您,无法正确销毁活动(正如您使用
finish()
)请求的那样),因为对话框仍保留对它的引用。

单击警报对话框的确认按钮后,完成活动,不只是显示对话框。这个错误基本上是告诉您在完成活动之前关闭警报对话框
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()
        }
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()
        }