Intereting Posts
Добавить панель инструментов поиска по карте google, например, в приложении для родных Android. Воспроизведение фрагментов ViewPager возобновляется, но не видно Как создать простой Android-виджет GetSystemServices undefined при вызове в фрагменте? Возобновите действие вместо запуска, если оно уже существует в фоновом стеке API Youtube «Ошибка при инициализации проигрывателя YouTube». Получить дочернее имя класса от родителя Android: один или несколько экземпляров HttpClient для каждого приложения Android: как изменить стиль редактирования текста? Ориентация экрана для Android Android ImageView масштабирует меньшее изображение до ширины с гибкой высотой без обрезки или искажения Проверьте, установлены ли дополнительные функции или нет. Android Studio TransformException: Ошибка: выполнение не выполнено для задачи ': app: transformClassesWithDexForDebug' Android SkImageDecoder :: Factory возвращен null Ошибка Создание GoogleApiClient для нескольких действий

Spinner onItemSelected с уже выбранным товаром

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

Этот обратный вызов вызывается только тогда, когда вновь выбранная позиция отличается от ранее выбранной позиции или если не было выбранного элемента.

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

Solutions Collecting From Web of "Spinner onItemSelected с уже выбранным товаром"

Я также нуждался в решении этой проблемы. То, что я хотел сделать, это иметь Spinner, который имеет диапазоны дат с опцией пользовательского диапазона. Строки будут выглядеть примерно так:

10 апреля – 10 мая
10 марта – 10 апреля
10 февраля – 10 марта
Пользовательский диапазон

Проблема в том, что если пользователь выбирает пользовательский диапазон и затем хочет изменить свой настраиваемый диапазон, он должен выбрать другой диапазон, а затем снова выбрать параметр настраиваемого диапазона. Я хотел, чтобы пользователь просто смог снова выбрать «Пользовательский диапазон», чтобы снова отобразить диалоговое окно настраиваемого диапазона.

Я подклассифицировал Spinner и создал своего собственного слушателя. Код переключает выбор, но затем сразу же переключает его так, что ничего не выбрано. В моем слушателе я просто игнорирую любую позицию, которая меньше нуля.

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

 package com.example.widget; import android.content.Context; import android.widget.Spinner; public class DateRangeSpinner extends Spinner { private ItemSelectionListener listener; public DateRangeSpinner(Context context) { super(context); } /** * This listener will be fired every time an item is selected, * regardless of whether it has already been selected or not. * * @param l */ public void setOnItemSelectedListener(ItemSelectionListener l) { listener = l; } public void removeOnItemSelectedListener() { listener = null; } @Override public void setSelection(int position) { setSelection(position, true); } @Override public void setSelection(int position, boolean animate) { if (listener != null) { listener.onItemSelected(position); } super.setSelection(position, animate); super.setSelection(-1, animate); } public interface ItemSelectionListener { public void onItemSelected(int position); } } 

Надеюсь, это поможет!

Вы можете сделать это с помощью настраиваемого адаптера, например, создать макет ваших желаний, а затем раздуть его в пользовательском адаптере, а затем в функции onItemClick вы можете получить представление этой функцией.

Чтобы различать каждый вид, вы должны установить тег каждой строки.

Вероятно, это работает в вашем состоянии.

Сообщите мне любую проблему, если у вас есть

Почему вы снова выбрали выбранный элемент. Просто дайте кнопку обновления, если вы хотите снова выполнить эту задачу.

Это элемент spinner с пользовательским диалоговым режимом и whitout promt:

 <Spinner android:id="@+id/spinner_metatag" android:layout_width="match_parent" android:layout_height="wrap_content" android:entries="@array/search_adv" /> 

Элемент Array, где значение по умолчанию помещается в позицию 0:

 <string-array name="search_adv"> <item>@string/search_adv_prompt</item> <item>@string/search_adv_title</item> <item>@string/search_adv_desc</item> <item>@string/search_adv_autore</item> .... </string-array> 

Элементы String для массива со значением по умолчанию:

 <string name="search_adv_prompt">Scegli un metatag</string> <!-- Default value--> <string name="search_adv_title">Titolo</string> <string name="search_adv_desc">Descrizione</string> <string name="search_adv_autore">Autore</string> ... 

И здесь код, чтобы предотвратить событие, запущенное onCreateMethod, и работу, чтобы разрешить выбирать один и тот же элемент:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search_adv_main); spinner = (Spinner) findViewById(R.id.spinner_metatag); spinner.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) { //prevent onCreate event fire and the loop if(pos==0) return; //HERE YOUR CODE //at the end move to the default element the spinner spinner.setSelection(0); } @Override public void onNothingSelected(AdapterView<?> arg0) {} }); } 

Надежда помогает. Идея исходит из второго решения из ответа TreKing

Используйте OnItemClickListener вместо itemSelectedListener. Это будет работать для каждого клика независимо от того, является ли он таким же или другим.

Я думаю, вы должны хранить значение в переменной, инициализировать vairable с -1. И измените значение, когда пользователь выбирает элемент spinner, если значение равно -1, попросите пользователя повторно выбрать или что захотите.

@i хочет, чтобы вызов вызывался также, если пользователь выбирает один и тот же элемент. Android сделает это для u, поскольку это поведение Android по умолчанию.