Cuadro de diálogo de alerta simple Kotlin


Ejemplo de como mostrar un cuadro de diálogo de alerta simple en Kotlin

fun showDialogAlertSimple() {
    AlertDialog.Builder(this)
        .setTitle("Titulo del diálogo")
        .setMessage("Contenido del diálogo.")
        .setPositiveButton(android.R.string.ok,
            DialogInterface.OnClickListener { dialog, which ->
                //botón OK pulsado
            })
        .setNegativeButton(android.R.string.cancel,
            DialogInterface.OnClickListener { dialog, which ->
                //botón cancel pulsado
            })
        .show()
}

Si no se especifica lo contrario para salir del diálogo el usuario puede pulsar la zona opaca, si queremos evitar eso se debe usar la propiedad: setCancelable() estableciendo el valor false

...
.setCancelable(false)
.show()

Dialogo permanente al rotar la vista

Por defecto el dialogo al rotar la vista se cierra, para mantener el dialogo permanente al rotar el dispositivo, lo debemos crear y llamar dentro de un DialogFragment

class SimpleAlertDialog : DialogFragment() {
    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        return activity?.let {
            val title = "Titulo del diálogo"
            val content = "Contenido del diálogo."
            val builder: AlertDialog.Builder = AlertDialog.Builder(requireActivity())
            builder.setTitle(title).setMessage(content)
                .setPositiveButton(android.R.string.ok) { _, _ ->
                    //Todo OK click
                }
                .setNegativeButton(android.R.string.cancel) { _, _ ->
                   //Todo Cancle click
                }
            return builder.create()
        } ?: throw IllegalStateException("Activity cannot be null")
    }

}

Su llamada des de un Activity

val modalDialog = SimpleAlertDialog()
modalDialog.show(supportFragmentManager, "confirmDialog")

Mostrar el dialogo desde un Fragment

val modalDialog = SimpleAlertDialog()
modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog")

Cómo pasar eventos a la Actividad

Si queremos propagar un evento del dialogo, pulsación de botones, selección de elementos etc.. deberemos usar un CallBack para el retorno del evento y en la Activity interceptar el evento con un Listener.

En el DialogFragment añadir la interface con los eventos

class SimpleAlertDialog : DialogFragment() {
...
interface OnContinueCancelClickListener {
    fun onPositiveClick()
    fun onCancelClick()
}
...
builder.setTitle(title).setMessage(content)
    .setPositiveButton(android.R.string.ok) { _, _ ->
        val listener = activity as OnContinueCancelClickListener?
        listener!!.onPositiveClick()
    }
    .setNegativeButton(android.R.string.cancel) { _, _ ->
        val listener = activity as OnContinueCancelClickListener?
        listener!!.onCancelClick()
    }

Y en la actividad añadir el Listener

class MainActivity : AppCompatActivity(), OnContinueCancelClickListener {
...
    override fun onPositiveClick() {
        toast("ok button")
    }

    override fun onCancelClick() {
        toast("cancel button")
    }
}

Enlaces

Documentación oficial de Diálogos

Anuncio publicitario

Publicado por Codelaby

Mobile DevDesigner

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: