如何在 android 中将数据传递给 MaterialAlertDialogBu​​ilder

how to pass data to MaterialAlertDialogBuilder in android

我正在使用最新的 material 设计库。现在要创建一个自定义对话框,我正在这样做

holder.id_edit_srt_bit.setOnClickListener {
            println(my_data[position])
            var data = my_data[position]

            MaterialAlertDialogBuilder(context)
                .setView(R.layout.dialog_edit_form)
                .setPositiveButton("OK") { dialog, which ->
                    println("---------> $dialog -> $which")
                }
                .setNegativeButton("NO") { dialog, which ->
                    println("---------> $dialog -> $which")
                }
                .show()
        }

单击它会打开带有我的自定义布局的对话框 dialog_edit_form。它有两个文本字段 id1id2.

现在打开此对话框时我需要设置一个值,该值位于 data 变量

怎么做?

我试过了但是没用

            var dialog = Dialog(context)
            dialog.findViewById<EditText>(R.id.id1)?.text = data?.val1 as Editable
            dialog.findViewById<EditText>(R.id.id2)?.text = data?.val2 as Editable

请仅以material设计方式回答。我不想要旧的方法来做这就是为什么我使用 MaterialAlertDialogBuilder

你必须这样做

var dialogView = MaterialAlertDialogBuilder(context)
    .setView(R.layout.dialog_edit_form)
    ...
    .show()

    dialogView.findViewById<EditText>(R.id.id1)?.text =
                Editable.Factory.getInstance().newEditable("${data?.val1}")
   
    dialogView.findViewById<EditText>(R.id.id2)?.text =
                Editable.Factory.getInstance().newEditable("${data?.val2}")

为了避免类型不匹配,可以使用Editable class的Factory inner class。

Editable.Factory.getInstance().newEditable("your_text_value")

此处提供了有关类型不匹配的更多详细信息。