【问题标题】:Why return null from custom dialog EditText?为什么从自定义对话框 EditText 返回 null?
【发布时间】:2018-07-08 04:46:34
【问题描述】:

这是 MainActivity onCreate 方法中的 AlertDialog:

import kotlinx.android.synthetic.main.dialog.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        fab.setOnClickListener { view ->
            AlertDialog.Builder(this@MainActivity)
                    .setView(LayoutInflater.from(this@MainActivity).inflate(R.layout.dialog, null))
                    .setPositiveButton("OK") {dialog, i ->
                        Toast.makeText(
                                this@MainActivity, dialogEditText.text, Toast.LENGTH_SHORT)
                                .show()
                        dialog.dismiss()
                    }.show()
        }
    }
}

这是对话框布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <EditText
        android:id="@+id/dialogEditText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </EditText>
</RelativeLayout>

但是,最后,我得到了这个错误:

java.lang.IllegalStateException: dialogEditText 不能为空

但是我填写了输入...这里有什么问题?

【问题讨论】:

  • dialogEditText.text 消息为空
  • 尝试添加其他消息。
  • 发布你的 oncreate
  • 我用完整的 onCreate 编辑了代码。在这种情况下,文本属性无关紧要,当我添加时我也得到了 null。
  • 我认为,代码在 activity_main 上下文中寻找dialogEditText

标签: android android-edittext kotlin android-alertdialog kotlin-extension


【解决方案1】:
 import kotlinx.android.synthetic.main.dialog.*
    val dialogBuilder = AlertDialog.Builder(this)
        val inflater = this.layoutInflater
        val dialogView = inflater.inflate(R.layout.dialog, null)
        dialogBuilder.setView(dialogView)
        val editText = dialogView.findViewById<View>(R.id.dialogEditText) as EditText
        dialogBuilder.setTitle("Your Dialog")
        dialogBuilder.setPositiveButton("OK", DialogInterface.OnClickListener { dialog, whichButton ->
           Toast.makeText(this@MainActivity, editText.text.toString(), Toast.LENGTH_SHORT)
                                    .show() 
                                     dialog.dismiss()

        })
        val b = dialogBuilder.create()
        b.show()

【讨论】:

  • 这没什么用
  • 是的,好的。但关键是我需要自定义对话框 EditText 中的输入值(作为字符串)。
  • 您使用的 dialogEditText 在您的代码中的任何地方都找不到。
  • 因为 kotlin,你可以使用扩展。检查我共享的对话框布局。 dialogEditText id 在那里,我在 MainActivity 开始时导入了布局。 (并且您可以使用 lambda 代替 DialogInterface.OnClickListener)但是感谢您的帮助!我发现了错误(请参阅我的答案)。
  • 可能是一种使用方式,谢谢。但我觉得我的答案不应该被否决。
【解决方案2】:

这是我找到的解决方案。感谢您的帮助!

    val view = LayoutInflater.from(this@MainActivity).inflate(R.layout.dialog, null)
    AlertDialog.Builder(this@MainActivity)
            .setView(view)
            .setPositiveButton("OK") {dialog, i ->
                Toast.makeText(
                        this@MainActivity, view.dialogEditText.text, Toast.LENGTH_SHORT)
                        .show()
                dialog.dismiss()
            }.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    相关资源
    最近更新 更多