Spinner возвращает из адаптера слишком много элементов

Есть Spinner, к нему есть адаптер. Мне надо получать выбранный итем, точнее - забирать из него текст. Для этого написал лиснер, который отправляет данные при отработке адаптера. Но я что то сделал не верно, так как лиснер возвращает мне не один выбранный элемент, а все элементы спинера по очереди. Вот код адаптера:

class SpinnerAdapter(
    context: Context,
    resId: Int,
    var daysList: List<String>, val onSpinnerItemClickListener: OnSpinnerItemClickListener
) :
    ArrayAdapter<String>(context, resId, daysList) {

    fun addAll(daysList: List<String>) {
        this.daysList = daysList as MutableList<String>
        notifyDataSetChanged()
    }

    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
        return getCustomView(position, convertView, parent)
    }

    override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
        return getCustomView(position, convertView, parent)
    }

    private fun getCustomView(position: Int, convertView: View?, parent: ViewGroup) =
        LayoutInflater.from(parent.context)
            .inflate(R.layout.item_spiner_row, parent, false).apply {
                val textView = this.findViewById<TextView>(R.id.dayOfWeek)
                textView.text = daysList[position]


                onSpinnerItemClickListener.onSpinnerItemClick(daysList[position])


            }

    interface OnSpinnerItemClickListener {
        fun onSpinnerItemClick(month: String)
    }
}

Строкой ниже я отправляю в активити текст по идее выбранного итема. Но, получается, что сам метод getCustomView отрабатывает на каждый итем, который есть в списке спиннера. А ка сделать, что бы вернул именно по выбранному элемента спиннера инфу?

onSpinnerItemClickListener.onSpinnerItemClick(daysList[position])

Ответы (1 шт):

Автор решения: ЮрийСПб

В строке onSpinnerItemClickListener.onSpinnerItemClick(daysList[position]) вы да, явно вызываете срабатывание слушателя при каждой отрисовке каждого отображаемого/изменяемого элемента.

Помимо того, что нужный вам слушатель и так должен быть у спиннера и может быть повешен на оный извне адаптера, вам надо вызывать слушатель только в момент, например, нажатия, а не отрисовки. Например так:

textView.setOnClickListener { onSpinnerItemClickListener.onSpinnerItemClick(daysList[position]) }
→ Ссылка