Не отклоняйте AlertDialog, если EditText пуст - PullRequest
0 голосов
/ 14 октября 2019

Несмотря на большое количество поисков и испытаний, я не могу избежать закрытия моего AlertDialog, если мой EditText пуст ... Я видел, что это была текущая проблема в StackOverflow с большим количеством ответов, но когда я его пробовал, онне работает ...

Вот мой код Kotlin, спасибо за вашу помощь ...

import androidx.appcompat.app.AlertDialog
import android.content.DialogInterface

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, DialogInterface.OnClickListener { dialogInterface, i ->
        var isValid = true

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

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

        if ( isValid ) {
            dialogInterface.dismiss()
        }

    })
}

Мой xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/question" />

    <EditText
        android:id="@+id/myedittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal" />


</LinearLayout>

Если я введузначение, у меня есть мое сообщение " да ". Если я не ввожу значение, у меня появляется сообщение " empty ", но мой диалог закрывается ...

Спасибо за вашу помощь,

MT

Ответы [ 3 ]

1 голос
/ 14 октября 2019

Используйте onShow для обработки, как показано ниже:

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 голос
/ 14 октября 2019

Вам нужно получить положительную кнопку, чтобы переопределить метод onclick

, вы можете использовать этот код:

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()
        }
    }
}
0 голосов
/ 14 октября 2019

Я не уверен, есть ли способ обойти функции кнопок alerttdialog. Если есть, я никогда не нашел это. Однако вы могли бы пойти с гораздо более простым решением. Просто создайте свой собственный вид «оповещения» с помощью editText и кнопок. Установите для view view.setVisibility (View.INVISIBLE) или (View.GONE), и любой из его дочерних представлений будет невидимым или исчезнет. Обычно, когда это необходимо, я делаю это с полупрозрачным черным фоном позади представления в качестве родителя;и установите видимость этого представления вперед и назад. Затем вы можете настроить функциональность кнопок и остальной части представления любым удобным для вас способом.

...