Проблемы с настройкой изображения для DSL Kotlin/Anko, определенного ImageView

Я пытаюсь использовать DSL Kotlin и Anko для создания диалогового окна с предупреждением, которое позволяет пользователю выбрать изображение, а затем загрузить его в ImageView. Сейчас я просто пытаюсь заставить ImageView работать, поэтому у меня есть кнопка, чтобы загрузить предварительно выбранное изображение из URL с помощью Picasso.

Когда я нажимаю кнопку в диалоговом окне предупреждения, я получаю эту ошибку:

kotlin.TypeCastException: ноль не может быть приведен к непустому типу android.widget.ImageView

Я думаю, по какой-то причине ImageView не загружается через findViewById. Кто-нибудь знает, почему это может быть? Я предполагаю, что у DSL Анко есть странное поведение, о котором я не знаю.

fab.setOnClickListener { view ->
            alert {
                title = "New Post"
                customView {
                    verticalLayout {

                        val subject = editText {
                            hint = "Subject"
                        }
                        imageView {
                            id = R.id.picked_image
                        }
                        linearLayout {
                            gravity = Gravity.CENTER
                            button("Choose Photo") {
                                onClick {
                                    Picasso.with(this@MainActivity)
                                            .load("http://SomeUrl/image.jpg")
                                            .into(findViewById(R.id.picked_image) as ImageView)

                                }
                            }
                            button("Choose Image") {}
                        }


                        positiveButton("Post") {  }
                        negativeButton("Cancel") {}
                    }
                }
            }.show()

1 ответ

Решение

Вы можете получить ссылку на ImageView как это и избежать необходимости иметь дело с идентификаторами в целом:

val iv = imageView()
...
    onClick {
        Picasso.with(this@MainActivity)
                .load("http://SomeUrl/image.jpg")
                .into(iv)
    }
...
Другие вопросы по тегам