Я использую новейшую библиотеку материального дизайна. Теперь, чтобы создать настраиваемый диалог, я делаю это

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. у него есть два текстовых поля с id1 и id2.

Теперь при открытии этого диалога мне нужно установить значение, которое находится в переменной 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

Пожалуйста, ответьте только в материальном дизайне. Мне не нужны старые способы сделать это. Поэтому я использую MaterialAlertDialogBuilder

0
Vikas Acharya 22 Июн 2020 в 17:16

1 ответ

Лучший ответ

Ты должен сделать вот так

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

Чтобы избежать несоответствия типов, вы можете использовать внутренний класс Factory класса Editable.

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

Более подробную информацию о несовпадении типов можно найти здесь. https://stackoverflow.com/a/37374301/13074527

-1
Vikas Acharya 22 Июн 2020 в 15:22