Android: элемент счетчика при нажатии не работает, если он уже выбран

У меня есть Spinner с интерактивным взаимодействием onItemSelected, которое работает, но как сказано в спецификации API:

This callback is invoked only when the newly selected position is different from the 
previously selected position or if there was no selected item.

Мне нужно снять это ограничение, и я хочу, чтобы обратный вызов вызывался также, если пользователь выбирает тот же элемент. Как это сделать?
Кто-нибудь делал то же самое?

Любая идея об этом будет ценной.


person Hulk    schedule 25.06.2012    source источник
comment
попробуйте с setOnItemClickListener   -  person Dheeresh Singh    schedule 25.06.2012
comment
тоже ищу такой же....   -  person Sri    schedule 25.06.2012


Ответы (3)


i want that the callback is invoked also if the user select the same element. How to do that?

Установка OnItemClickListener для Spinner вызовет исключение, а при использовании ItemSelectedListener вы не будете уведомлены, если пользователь нажмет на выбранный/тот же элемент.

Я полагаю, что единственный способ обойти это ограничение — использовать CustomAdapter для элементов Spinner и реализовать setOnClickListener для каждого представления в адаптере.

person Arun George    schedule 25.06.2012

У меня была такая же проблема, и я немного огляделся. Может быть несколько способов заставить эту функцию работать, но мне помогло расширение счетчика. Вы можете сделать что-то похожее на то, что я нашел здесь.

Таким образом, вместо того, чтобы использовать счетчик Android по умолчанию, расширьте его и добавьте в него некоторый код, который вызовет ваш метод обратного вызова.

Я хотел бы добавить, что использование setOnItemClickListener на Spinner вызовет исключение, как указано в документации:

A spinner does not support item click events. Calling this method will raise an exception.
person Ali Derbane    schedule 26.03.2013

В этом случае вам нужно сделать собственный счетчик: Попробуйте это

public class MySpinner extends Spinner{

OnItemSelectedListener listener;

public MySpinner(Context context, AttributeSet attrs)
{
    super(context, attrs);
}

@Override
public void setSelection(int position)
{
    super.setSelection(position);

    if (position == getSelectedItemPosition())
    {
        listener.onItemSelected(null, null, position, 0);
    }       
}

public void setOnItemSelectedListener(OnItemSelectedListener listener)
{
    this.listener = listener;
}
}
person Minkoo    schedule 02.12.2017