2013-11-27 6 views
6

У меня есть элемент spinner, привязанный к адаптеру массива, который может иметь 0 или более предметов в любое время. Я хочу, чтобы выпадающий список spinner отображал только три элемента за раз, а остальные элементы - прокручиваемые. Я попытался обернуть счетчик в макете с фиксированной шириной, но выпадающий список прядильщика все еще занимает весь экран (если есть много элементов в адаптере массива), чтобы отобразить список.Android ограничить количество элементов, отображаемых в выпадающем списке прядильщика

+0

Я не думаю, что есть простой способ сделать это без настройки адаптера. Но, возможно, это может помочь: https://github.com/ankitthakkar/DropDownSpinner –

+0

как вы это сделаете, настроив адаптер? я не хочу создавать свой собственный элемент spinner с помощью кнопки и списка, как это сделано в списке. – thunderbird

ответ

4

Я искал исходный код Spinner и кажется, что вы не можете сделать это с помощью счетчика.

Spinner имеет свой собственный частный интерфейс под названием SpinnerPopup, который определяет способ отображения выпадающих элементов. В настоящее время он основан на spinnerMode, что позволяет выпадающий список или список диалогов.

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

  1. Реализовать свой собственный счетчик на основе других виджетов, таких как в this example.
  2. Copy the code класс Spinner, который кажется довольно автономным и реализует вашу версию спиннера с ним, изменяя все, что вам нравится в нем.

Извините, но я не мог больше помочь.

Удачи вам!

EDIT:

Если вы выбрали вариант 2, я думаю, что все, что вам нужно сделать, это добавить свой режим реализации интерфейса SpinnerPopup. Затем внутри конструктора Spinner(Context context, AttributeSet attrs, int defStyle, int mode) добавьте еще case в switch, проверяя режимы для создания собственного всплывающего окна. Кажется не сложно.

+0

Я думаю, что я поеду со вторым вариантом..sounds проще! – thunderbird

+0

Вернитесь сюда с результатами позже.:) –

+0

Где вы загружали исходный код? Я использовал следующую ссылку: http: //grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/ widget/Spinner.java' (позже понял, что это был исходный код с пути назад 2009 г.). Удалено почти все, что показало ошибку, и в функции onClick я устанавливаю ширину и высоту диалогового окна spinner (всплывающее окно в android 1.5), который работал! – thunderbird

-1

Способ использования этой функции - использовать функцию и передать ей адаптер массива. Сделать массив, который может содержать только 3 элемента только arr[3]

Теперь передайте, что обр к вертушке вы используете (локаль). Там вы можете получить данные трех прядильщиков, которые вам нужны.

+0

Но как вы показываете остальную часть данных, если вы просто передаете 3 элемента? –

+1

Каждый раз, когда вы прокручиваете вниз, вам нужно вызвать эту функцию, чтобы отобразить следующие три параметра (возможно, создать обработчик?). Вы можете объявить статический счетчик в этой функции для отслеживания. – SeasonalShot

+0

Как вы можете получить событие scrolldown внутри spinner, чтобы обнаружить это? –

2

Вот в конечном счете простое решение .. просто скопировать эту строку в Spinner теге ...

android:dropDownHeight="100dp" <!--change 100dp to your requirement--> 

Вы также можете изменить ширину ...

android:dropDownWidth="100dp" <!--change 100dp to your requirement--> 

и вы знаете, что это работает на AutoCompleteTextView тоже и с atleast api 16 ...

+0

Это не работает для меня. – fobbymaster

Смежные вопросы