Android привязать Spinner к классу - PullRequest
2 голосов
/ 18 марта 2010

У меня проблемы с виджетом Spinner. Учитывая следующий код:

    ArrayList<Person> people= new ArrayList<Person>();

    Person = null;
    for(int i = 0; i!= 10; i++) {
        p = new Person();
        s.setID(i);
        s.setName("Name " + i);
        people.add(s);
    }

Я использую следующий код для привязки его к Spinner:

 Spinner spinner1 = (Spinner) findViewById  (R.id.spinner);       
 ArrayAdapter<Person> adapter = new ArrayAdapter<Person>(this, android.R.layout.simple_spinner_item, people);                           
 spinner1.setAdapter(adapter);  

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

Спасибо.

Ответы [ 2 ]

11 голосов
/ 18 марта 2010

Если я правильно понимаю ваш вопрос, вы бы хотели, чтобы имя отображалось в выпадающем списке счетчика. Когда элемент выбран, вы хотите вернуть идентификатор.

Есть 2 способа подойти к этому.

Самый простой способ - реализовать toString (), который возвращает имя в вашем объекте Person. ArrayAdapter вернет это значение при привязке текстовых значений вашего объекта к выпадающему представлению. Затем в своей деятельности вы можете установить onItemClickListener для Spinner и вызвать adaptor.getItemAtPosition (position), чтобы получить объект Person. Из этого объекта вы можете получить свой идентификатор.

Второй подход заключается в расширении ArrayAdapter и реализации методов getView, getDropDownView и getItem. GetView отвечает за создание строк, которые вы видите, когда нажимаете на вращатель. GetDropDownView отвечает за создание представления, которое вы видите в счетчике. И метод getItem вернет объект или, в вашем случае, идентификатор в указанной позиции. Вы должны связать имя элемента Person с textview в ваших методах getView и getDropDownView. После того как вы создали свой собственный ArrayAdapter, вы должны установить onItemClicKListener для Spinner и обработать его так же, как я упоминал выше.

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

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

2 голосов
/ 09 марта 2011

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

jagsund в основном прав, согласитесь, он неправильно определил getView и GetDropDownView - на самом деле это противоположно тому, что он сказал: getView показывает содержимое внутри элемента управления spinner, getDropDownView создает строки представления, которые вы видите при нажатии на прядильщик.

Таким образом, если вы не нажмете на спиннер, getDropDownView даже не будет вызван - вы увидите это, если переопределите ArrayAdapter

...