Проблема Kotlin ImageView с несоответствием типа функции getView

#android #android-layout #kotlin

#Android #android-макет #Kotlin

Вопрос:

У меня возникли проблемы с четвертой строкой. В моем коде getLogo возвращает целое число (идентификатор) изображения. Теперь я хочу использовать отображаемый идентификатор для изображения и вставить его в ImageView с указанным идентификатором. Однако слева от знака равенства я получаю сообщение об ошибке variable expected , а справа написано Type Mismatch ... Required: ImageView Found: Int .

 override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
    val layoutInflator = LayoutInflater.from(context)
    val row = layoutInflator.inflate(R.layout.layoutlistviewloan, parent, false)
    row.findViewById<ImageView>(R.id.institutionImage) = loansModel.loan[position].institution.getLogo()
}
  

Ответ №1:

findViewById() это функция, которая возвращает a View (в данном случае вы говорите, что это an ImageView ). Это не переменная ( val или var ), которой вы можете присвоить значение.

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

 row.findViewById<ImageView>(R.id.institutionImage).setImageResource(drawableId)
  

вы могли бы вставить код «получение идентификатора для рисования» в качестве setImageResource параметра

 row.findViewById<ImageView>(R.id.institutionImage).setImageResource(loansModel.loan[position].institution.getLogo())
  

но лично я бы просто установил это как переменную, чтобы сделать ее более читаемой, вместо того, чтобы делать слишком много в одной строке (это может сбить с толку!)

 val logoId = loansModel.loan[position].institution.getLogo()
row.findViewById<ImageView>(R.id.institutionImage).setImageResource(logoId)