Зачем возвращать ноль из пользовательского диалога EditText?
Вот AlertDialog внутри метода MainActivity onCreate:
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 не должен быть нулевым
Но я заполнил ввод... Что здесь не так?
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()
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()