J'ai un AlertDialog et sa setCancelable()
est fausse. Dans la fonction Onbackpressed
, je veux que le AlertDialog soit fermé. Mais quand setCancelable()
est faux, la touche retour ne fonctionne pas du tout. Que dois-je faire pour me débarrasser de ce problème? Je ne veux pas changer setCancelable()
en true car j'aurai un autre problème.
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()
}
}
il suffit d'ajouter un onKeyListener et d'annuler la boîte de dialogue sur l'événement de touche de retour.
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
}
}
si vous ne souhaitez pas fermer la boîte de dialogue lorsque vous touchez la zone extérieure de la boîte de dialogue, vous pouvez définir la propriété
permissionDialog.setCanceledOnTouchOutside(false)
et si vous voulez fermer la boîte de dialogue sur backpress, vous devez appeler la méthode sur keyListener
permissionDialog?.setOnKeyListener { dialog, keyCode, _ ->
if (keyCode == KeyEvent.KEYCODE_BACK) {
dialog?.dismiss()
true
}
false
}
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
}
})