#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
до сих пор остается общедоступным. Вы можете прочитать больше в официальной документации здесь.