0
votes

Ne pas rejeter alertdialog si EditText est vide

Malgré beaucoup de recherches et d'essais, je ne peux pas éviter mon alertdialog de fermer si mon editext est vide ... J'ai vu qu'il s'agissait d'une question actuelle sur Stackoverflow avec beaucoup de réponses, mais quand je l'essaie, Ne fonctionne pas ...

Voici mon code Kotlin, merci pour votre aide ... xxx

mon xml: xxx < / Pré>

Si je saisis une valeur, j'ai mon message " ouais ouais ". Si je ne sais pas une valeur, j'ai mon message " vide ", mais ma boîte de dialogue renvoie ...

Merci pour votre aide,

MT


1 commentaires

Cela fonctionne comme conçu. Voir développeur.android.com/guide/topics/ui/dialogs : " Lorsque l'utilisateur touche l'un des boutons d'action créés avec un alertdialog.builder, le système rejette la boîte de dialogue pour vous. " Je vous suggère d'utiliser un dialogue de fragment à la place.


3 Réponses :


1
votes

Je ne suis pas sûr s'il existe un moyen de contourner les fonctions des boutons d'AlertDialog. S'il y a, je ne l'ai jamais trouvé. Cependant, vous pouvez aller avec une solution beaucoup plus simple. Il suffit de créer votre propre vue "alerte" avec un editext et des boutons. Définissez la vue sur la vue.setVisibilité (vue.Invisible) ou (vue.gone) et que l'une de ses vues d'enfants sera invisible ou partiellement parti. En général, lorsque cela est nécessaire, faites-le avec un fond noir semi-transparent derrière la vue comme le parent; et définir la visibilité de cette vue d'avant en arrière. Ensuite, vous pouvez personnaliser la fonctionnalité des boutons et le reste de la vue de quelque manière que vous souhaitiez.


0 commentaires

1
votes

Utiliser Onshow code> pour gérer cela comme ci-dessous:

val dialog = alertDialog.create()
dialog.setOnShowListener {
    dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener {
       var isValid = true

       if ( isEmpty(myedittext.text.toString()) ) {
           isValid = false
           Toast.makeText(this@MainActivity, "empty", Toast.LENGTH_SHORT).show()
       }

       if ( isValid ) {
           Toast.makeText(this@MainActivity, "yeah!", Toast.LENGTH_SHORT).show()
           dialog.dismiss()
       }
    }
}

dialog.show()


1 commentaires

Oui ! Ça marche ! Thks beaucoup! J'ai passé tellement de temps sur cette question, cool!



1
votes

Vous devez obtenir le bouton positif pour remplacer la méthode Onclick

Vous pouvez utiliser ce code: P>

private fun showMyEditextDialog() {
    val alertDialog = AlertDialog.Builder(this)

    val view = layoutInflater.inflate(R.layout.my_layout, null)
    val myedittext = view.findViewById(R.id.myedittext) as EditText


    alertDialog.setTitle(getString(R.string.title))
    alertDialog.setView(view)
    alertDialog.setCancelable(false)
    alertDialog.setPositiveButton(R.string.ok, null)
    alertDialog.create()

    var dialog = alertDialog.create()
    dialog.show()
    dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
        var isValid = true

        if ( isEmpty(myedittext.text.toString()) ) {
            isValid = false
            Toast.makeText(this, "empty", Toast.LENGTH_SHORT).show()
        }

        if ( isValid ) {
            Toast.makeText(this, "yeah!", Toast.LENGTH_SHORT).show()        }

        if ( isValid ) {
            dialog.dismiss()
        }
    }
}


1 commentaires

Oui ! Ça marche ! Thks beaucoup! J'ai passé tellement de temps sur cette question, cool!