Отображение определенного поля из списка массивов в spinner

#android #kotlin

#Android #kotlin

Вопрос:

Я хочу показать только одно поле в spinner из arraylist.

Раньше я переопределял toString в классе модели следующим образом.

 data class University(
        @SerializedName("university") val university: String,
        @SerializedName("abbr") val abbr: String,
        @SerializedName("university_id") val university_id: String) {

    override fun toString(): String {
        return "$abbr - $university"
    }
}
  

И использовал его так в activity

         viewModel.getUniversities().observe(
                this,
                Observer { universities ->
                    val adapter = ArrayAdapter<University>(this, android.R.layout.simple_spinner_dropdown_item, universities)
                    universitySpinner.adapter = adapter

                    universitySpinner.onItemSelectedListener = object : OnItemSelectedListener {

                        override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
                            universityId = universities!![position].university_id.toString()
                        }

                        override fun onNothingSelected(arg0: AdapterView<*>) {

                        }
                    }
                }
        )
  

Это возвращает одну строку, как я и предполагал.

Теперь у меня аналогичная проблема, но теперь мой класс модели сгенерирован, поэтому я не могу переопределить toString, но я хотел бы отобразить только одно поле (университет) в spinner. Итак, что я должен делать в activity?

Ответ №1:

Поскольку вы используете Kotlin, вы можете использовать функцию расширения в своем классе, чтобы сохранить тот же синтаксис, что и раньше. Предположим, что вызван ваш сгенерированный класс UniversityGenerated , функция расширения будет выглядеть следующим образом:

 fun UniversityGenerated.toString(): String {
    return "${this.abbr} - ${this.university}"
}
  

с abbr и university до сих пор остается общедоступным. Вы можете прочитать больше в официальной документации здесь.