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 ... p> mon xml: p> Si je saisis une valeur, j'ai mon message " ouais ouais em>".
Si je ne sais pas une valeur, j'ai mon message " vide em>", mais ma boîte de dialogue renvoie ... p> Merci pour votre aide, P> MT p> p>
3 Réponses :
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. P>
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()
Oui ! Ça marche ! Thks beaucoup! J'ai passé tellement de temps sur cette question, cool!
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() } } }
Oui ! Ça marche ! Thks beaucoup! J'ai passé tellement de temps sur cette question, cool!
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.