Search code examples
androidandroid-edittextkotlinandroid-alertdialogkotlin-extension

Why return null from custom dialog EditText?


Here's the AlertDialog inside the MainActivity onCreate method:

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()
        }
    }
}

Here's the dialog layout

<?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>

However, in the end, I got this error:

java.lang.IllegalStateException: dialogEditText must not be null

But I filled the input... What's wrong here?


Solution

  • This is the solution what I found. Thanks for helping!

        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()