В пользовательском интерфейсе должен быть счетчик, который содержит некоторые имена (имена видны), и каждое имя имеет свой собственный идентификатор (идентификаторы не равны последовательности отображения). Когда пользователь выбирает имя из списка, переменная currentID должна быть изменена.
Приложение содержит список ArrayList
Где Пользователь - объект с идентификатором и именем:
public class User{
public int ID;
public String name;
}
Я не знаю, как создать счетчик, который отображает список имен пользователей и связывает элементы счетчика с идентификаторами, поэтому, когда элемент счетчика выбран / изменен, переменная currentID устанавливается на соответствующее значение.
Буду признателен, если кто-нибудь сможет показать решение описанной проблемы или предоставить какую-либо ссылку, полезную для решения проблемы.
Спасибо!
Ответы:
Вы можете посмотреть на этот ответ . Вы также можете использовать специальный адаптер, но приведенное ниже решение подходит для простых случаев.
Вот повторный пост:
Итак, если вы пришли сюда, потому что хотите, чтобы в Spinner были и метки, и значения - вот как я это сделал:
Spinner
обычный образarray.xml
файле 2 массива равного размера - один массив для меток, один массив для значенийSpinner
сandroid:entries="@array/labels"
Когда вам нужно значение, сделайте что-нибудь вроде этого (нет, вам не нужно связывать его):
источник
Я знаю, что нить старая, но на всякий случай ...
Пользовательский объект:
Пользовательский адаптер счетчика (ArrayAdapter)
И реализация:
источник
Skipped 317 frames! The application may be doing too much work on its main thread.
Есть идеи?"Самое простое решение
Изучив различные решения SO, я обнаружил, что следующее является самым простым и чистым решением для заполнения файла
Spinner
customObjects
. Вот полная реализация:User.java
разреш / макет / spinner.xml
разреш / макет / your_activity_view.xml
В вашей деятельности
источник
currentID
как только значение Spinner изменяется. В большинстве случаев значение счетчика нужно только после последующего нажатия кнопки, например « Отправить» или « Сохранить» , а не сразу после изменения счетчика, и если этого можно избежать, это обеспечивает гораздо более простое решение.getSelectedItem()
вызов. Спасибо за чаевые.Для простых решений вы можете просто перезаписать «toString» в своем объекте.
а затем вы можете использовать:
Таким образом, ваш счетчик будет отображать только имена пользователей.
источник
Безусловно, самый простой способ, который я нашел:
Теперь вы можете вставить любой объект в спиннер, и он отобразит указанную метку.
источник
Просто небольшая настройка ответа Хоакина Альберто может решить проблему стиля. Просто замените функцию getDropDownView в пользовательском адаптере, как показано ниже,
источник
У меня отлично работает, код, необходимый для getResource (), выглядит следующим образом:
Просто нужно убедиться (самостоятельно), что значения в двух массивах правильно выровнены!
источник
Вдохновленный Хоакином Альберто, это сработало для меня:
источник
На основе образца Хоакина Альберто (спасибо), но он работает для любого типа (вы должны реализовать toString () в типе, чтобы вы могли форматировать вывод.
Также я думаю, что вы можете заменить List на Array, поэтому вам не нужно делать toArray в List, но у меня был List ..... :)
источник
Чтобы понять трюк, нужно знать, как работают адаптеры в целом и ArrayAdapter в частности.
Адаптеры: это объекты, которые могут связывать структуры данных с виджетами, тогда эти виджеты отображают эти данные в списке или в счетчике.
Итак, два вопроса, на которые отвечает адаптер:
EditText
виджета или составного представления, в соответствии с этими данными?Ответы ArrayAdapter:
row.xml
ORandroid.R.layout.simple_spinner_item
) для любого индекса одинаков и зависит от ресурса, идентификатор которого был передан конструктору ArrayAdapter..setText()
будет использоваться со строковым форматом элемента во вспомогательной структуре данных. Формат строки будет получен при вызове.toString()
элемента.CustomListViewDemo.java
adaptor_content.xml
main.xml
Работает нормально, надеюсь пригодится.
источник
Мой пользовательский объект
Я также хотел установить этот объект в качестве источника адаптера для моего счетчика без расширения ArrayAdapter, чтобы я сделал то, что сделал.
Теперь вы сможете увидеть результаты в своем счетчике, трюк состоял в том, чтобы переопределить
toString()
в вашем настраиваемом объекте , поэтому какое бы значение вы ни хотели отобразить в счетчике, просто верните его в этом методе.источник
Я думаю , что лучшим решением является «Простейшее решение» по Josh Пинтера .
Это сработало для меня:
источник
Если вам не нужен отдельный класс, я имею в виду простой адаптер, сопоставленный с вашим объектом. Вот мой код, основанный на предоставленных функциях ArrayAdapter.
И потому, что вам может потребоваться добавить элемент после создания адаптера (например, асинхронная загрузка элемента базы данных).
Просто, но эффективно.
А затем вы можете использовать этот код (я не мог поместить Category [] в конструктор адаптера, потому что данные загружаются отдельно).
Обратите внимание, что адаптер adapter.addAll (items) обновляет счетчик, вызывая notifyDataSetChanged () во внутреннем.
источник
Делать:
источник