如果EditText为空,请勿关闭AlertDialog

时间:2019-10-14 17:07:20

标签: android kotlin android-activity android-alertdialog

尽管进行了很多搜索和试验,但是如果我的EditText为空,我无法避免我的AlertDialog关闭...我看到这是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>

如果输入一个值,则显示“ ”消息。 如果我没有输入值,则显示“ ”消息,但对话框关闭...

感谢您的帮助,

MT

2 个答案:

答案 0 :(得分:1)

您需要获得一个肯定的按钮才能覆盖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()
        }
    }
}

答案 1 :(得分:0)

我不确定是否有办法绕过alertdialog的按钮功能。如果有,我从来没有找到它。但是,您可以采用更简单的解决方案。只需使用editText和按钮创建您自己的“警报”视图。将视图设置为view.setVisibility(View.INVISIBLE)或(View.GONE),其任何子视图也将不可见或消失。通常,在必要时,我会以父视图的后面有半透明的黑色背景来进行此操作。并来回设置该视图的可见性。然后,您可以根据需要自定义按钮的功能以及视图的其余部分。