web-dev-qa-db-ja.com

警告ダイアログのsetcancelableがfalseの場合、backpressedで機能しない

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()
    }
}
9
MMG

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
        }
    }
4
Alif Hasnain

ダイアログの外側の領域に触れたときにダイアログを閉じたくない場合は、プロパティを設定できます

    permissionDialog.setCanceledOnTouchOutside(false)

バックプレスのダイアログを閉じる場合は、keyListenerのメソッドを呼び出す必要があります。

 permissionDialog?.setOnKeyListener { dialog, keyCode, _ ->
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            dialog?.dismiss()
            true
        }
        false
    }
3
Raza
dialogBuilder.setOnKeyListener(object : OnKeyListener() {
            fun onKey(dialog: DialogInterface, keyCode: Int, event: KeyEvent?): Boolean {
                if (keyCode == KeyEvent.KEYCODE_BACK) {
//if you want to cancel the dialog only
                    dialog.cancel()
                    //if you want to finish then 
                   // finish()
                }
                return true
            }
        })
3
Wahdat Kashmiri