Android Spinner getDropDownView repite elementos después de la selección

Tengo el siguiente SpinnerAdapter que con éxito me trae una list de mi object Disciplina con su estilo de layout correcto tanto para el elemento giratorio como para los elementos desplegables. Pero cuando selecciono uno de los elementos, el text de la position 0 se repite en la position del elemento seleccionado.

class ClassesSpinnerAdapter(context: Context, resourceId: Int, val disciplineClasses: List<Discipline>) : ArrayAdapter<Discipline>(context, resourceId, disciplineClasses) { override fun getItem(position: Int): Discipline { return disciplineClasses[position] } override fun getCount(): Int { return disciplineClasses.size } override fun getItemId(position: Int): Long { return super.getItemId(position) } override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { var holder: ClassSpinnerHolder var rowView: View if (convertView == null) { rowView = LayoutInflater.from(parent?.context).inflate(R.layout.classes_spinner_row, parent, false) holder = ClassSpinnerHolder() holder.classNameTxt = rowView.findViewById(R.id.classes_spinner_text) as TextView? holder.classNameTxt?.text = disciplineClasses[position].className.replace("ano", "") rowView.tag = holder } else { holder = convertView.tag as ClassSpinnerHolder rowView = convertView } val discipline: Discipline = disciplineClasses[position]; if (discipline != null) { holder.classNameTxt?.text = disciplineClasses[position].className.replace("ano", "") } return rowView } override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup?): View { var holder: ClassSpinnerHolder var rowView: View if (convertView == null) { rowView = LayoutInflater.from(parent?.context).inflate(R.layout.classes_spinner_row, parent, false) holder = ClassSpinnerHolder() holder.classNameTxt = rowView.findViewById(R.id.classes_spinner_text) as TextView? holder.classNameTxt?.text = disciplineClasses[position].className.replace("ano", "") rowView.tag = holder } else { holder = convertView.tag as ClassSpinnerHolder rowView = convertView } return rowView } inner class ClassSpinnerHolder() { var classNameTxt: TextView? = null } 

Este es el resultado que obtengo:

Estado inicial

Primera lista desplegable

Dropdown después de seleccionar el segundo elemento

Lo resolví un poco quitando el método getDropDownView () y anulando toString en mi class de model, pero quería una mejor solución, creo que estoy anulando getDropDownView () de una manera incorrecta, ¿alguien puede ayudarme?

    En getDropDownView() , solo actualiza los valores de la vista dentro de su if (convertView == null) . Siempre debe actualizar todos los valores cada vez que se llame al método, o las vistas recicladas tendrán basura.