【问题标题】:MaterialAlertDialogBuilder crashes on custom view editTextMaterialAlertDialogBu​​ilder 在自定义视图 editText 上崩溃
【发布时间】:2020-03-13 11:28:20
【问题描述】:

AlertDialog(Material) 在尝试读取 editText 内容时崩溃。

警报对话框:

MaterialAlertDialogBuilder(activity)
            .setTitle(title)
            .setMessage(message)
            .setView(R.layout.dialog_settings_entry)
            .setPositiveButton(getString(R.string.text_change)) { dialog, which ->
                etUserInput.hint = message
                sgr = etUserInput.text.toString() // << crashes here
                dialog.dismiss()
            }
            .setNegativeButton(getString(android.R.string.cancel)) { dialog, _ ->
                dialog.dismiss()
            }
            .show()

点击正面按钮结果如下:

    java.lang.IllegalStateException: etUserInput must not be null
        at com.home.profile.SettingsFragment$buildAlertDialog$1.onClick(SettingsFragment.kt:332)
        at androidx.appcompat.app.AlertController$ButtonHandler.handleMessage(AlertController.java:167)

etUserInput 是单独布局中的简单editText。 不确定崩溃原因。希望对它有任何见解或任何有用的材料示例。

【问题讨论】:

  • 在哪里初始化 EditText etUserInput?我想你忘了初始化它
  • 我猜这是 kotlin syntetics?如果是这样,包含etUserInput 的视图是否在当前屏幕中膨胀?
  • 是的,etUserInput 通过 Kotlin 合成导入膨胀。
  • 即使尝试过尝试,etUserInput.text?.let{ sgr = it.toString() } 但没有运气!

标签: android android-edittext illegalstateexception material-dialog


【解决方案1】:

DialogInterface 转换为AlertDialog,然后使用findViewById

科特林:

val et = (dialog as? AlertDialog)?.findViewById<EditText>(R.id.etUserInput)
val text = et?.text.toString()

--

Java:

EditText et = ((AlertDialog)dialog).findViewById(R.id.etUserInput);
String text = et.getText().toString();

--

MaterialAlertDialogBuilder(activity)
            .setTitle(title)
            .setMessage(message)
            .setView(R.layout.dialog_settings_entry)
            .setPositiveButton(getString(R.string.text_change)) { dialog, which ->
                val text = (dialog as? AlertDialog)?.findViewById<EditText>(R.id.etUserInput)?.text?.toString()

                dialog.dismiss()
            }
            .setNegativeButton(getString(android.R.string.cancel)) { dialog, _ ->
                dialog.dismiss()
            }
            .show()

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多