我有一个AlertDialog,它的setCancelable()为false。在Onbackpressed函数中,我希望AlertDialog关闭。但是,当setCancelable()为false时,后退键根本不起作用。我应该怎么做才能摆脱这个问题?我不想将setCancelable()更改为true,因为我将遇到另一个问题。

import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    lateinit var dialogBuilder: AlertDialog.Builder
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        dialogBuilder = AlertDialog.Builder(this)
        dialogBuilder.setMessage("Check your internet connection")
            .setPositiveButton("OK") { _, _ ->
                Toast.makeText(this, "OK", Toast.LENGTH_LONG).show()
            }.setCancelable(false)
            .create().show()
    }
}

最佳答案

只需添加一个onKeyListener并在返回键事件上取消对话框即可。

    lateinit var dialog: AlertDialog

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        dialog = AlertDialog.Builder(this).setMessage("Check your internet connection")
                .setPositiveButton("OK") { _, _ ->
                    Toast.makeText(this, "OK", Toast.LENGTH_LONG).show()
                }.setCancelable(false)
                .create()
        dialog.show()

        dialog.setOnKeyListener { _, keyCode, _ ->
            if(keyCode == KeyEvent.KEYCODE_BACK) {
                if(dialog.isShowing) {
                    dialog.dismiss()
                }
            }
            true
        }
    }

07-24 09:18