Реакция на повторное нажатие (повторный выбор) элемента Spinner, когда он уже выбран

Использую стандартный Spinner (Android Studio, Kotlin, android.widget). Нужна реакция на повторное нажатие элемента Spinner, после того как этот элемент уже был выбран. Я не нашёл стандартных способов как это сделать. Вот мой код:

binding.alarmRepeatingModeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {

        // Вызывается при выборе любого элемента Spinner (кроме уже выбранного)
        override fun onItemSelected(
            parentView: AdapterView<*>?,
            selectedItemView: View?,
            position: Int,
            id: Long
        ) {
            val selectedValue = parentView?.getItemAtPosition(position).toString()
            if(selectedValue != "Select days") {
                hideWeekDaysAbbreviatedText()
            }
            else {
                //Реакция на нажатие на элемент "Select days".
                //Если значение спиннера уже установлено на "Select days", то повторное нажатие ничего не делает.
                //А мне нужно, чтобы срабатывало. Помогите!
                showWeekDaysChoosingPopup()
            }
        }

        //Вызывается если ничего не выбрано (не используется)
        override fun onNothingSelected(parentView: AdapterView<*>?) { }
    }

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

Автор решения: Camporation

На англоязычном StackOverflow уже отвечали на этот вопрос 3 года назад: https://stackoverflow.com/questions/64550613/spinner-already-selected-item-selection-event

Думаю, что стандартного решения нет. Но вот как оно делается (у меня всё заработало):

  1. Создаём класс расширяющий Spinner
    class MySpinner(context: Context, attrs: AttributeSet?) : androidx.appcompat.widget.AppCompatSpinner(
    context,
    attrs
)
{
    var listener: OnItemSelectedListener? = null

    override fun setSelection(position: Int)
    {
        super.setSelection(position)
        if (position == selectedItemPosition)
        {
            listener!!.onItemSelected(this, selectedView, position, selectedItemId)
        }
    }

    override fun setOnItemSelectedListener(listener: OnItemSelectedListener?)
    {
        this.listener = listener
    }
}
  1. Добавляем ссылку на него в Layout (заменяем спиннер на свой). Вместо com.example.passwordalarmclock.MySpinner вставляем ссылку на класс MySpinner (ПКМ по классу -> copy reference)

    <com.example.passwordalarmclock.MySpinner
        android:id="@+id/alarmRepeatingModeSpinner"
        android:layout_width="336dp"
        android:layout_height="75dp"
        />
    
  2. Всё остальное оставляем как есть (всё стандартно), в том числе логику. В итоге просто onItemSelected начнёт срабатывать даже при повторном выборе.

Если кто знает решение, которое ещё проще, можете поделиться. Спасибо за внимание.

→ Ссылка