Настройка значений и отображение текста в Android Spinner - PullRequest
17 голосов
/ 31 мая 2010

Мне нужна помощь в настройке значения и отображении текста в счетчике. на данный момент я заполняю мой счетчик адаптером массива, например

mySpinner.setAdapter(myAdapter);

и, насколько я знаю, после этого текст на дисплее и значение счетчика в одной и той же позиции совпадают. Другой атрибут, который я могу получить от прядильщика, - это позиция на предмете.

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

, который содержит текст и значение.

, где отображается текст, а значение находится на заднем конце. поэтому, если я изменю выпадающий список, я могу использовать либо выбранный текст, либо значение. но это не происходит в случае Android Spinner.

Например:

Текстовое значение
Кот 10
Гора 5
Камень 9
Рыба 14
Река 13
Поясница 17

поэтому из массива выше я отображаю только текст неживых объектов, и я хочу, чтобы, когда пользователь выбирает их, я получал там значение, то есть, например, когда выбрана гора, я получаю 5

Надеюсь, этот пример прояснил мой вопрос ...

Thankx

Ответы [ 2 ]

15 голосов
/ 31 мая 2010

Если вы не хотите создавать свой собственный класс адаптера, вы можете вместо этого обернуть ваши данные во что-то, что toString возвращает то, что вы хотите показать в счетчике. Я использую такой класс:

public class TextItemPair<T> {
    private String text;
    private T item;
    public TextItemPair(String text, T item) {
            this.text = text;
            this.item = item;
    }
    public String getText() {
        return text;
    }
    public T getItem() {
        return item;
    }
    @Override
    public String toString() {
        return getText();
    }
}

А когда вертушка меняется:

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    YourTypeHere t = ((TextItemPair<YourTypeHere>)spinner.getItemAtPosition(position)).getItem();
}
12 голосов
/ 31 мая 2010

Шаг # 1: Создайте модель данных для вашей пары текста и значений

Шаг # 2: Расширьте BaseAdapter или ArrayAdapter, чтобы обернуть вашу модель данных, переопределив getView(), чтобы вернуть то, что вы хотите отобразить в самом Spinner

Шаг # 3: В событии выбора используйте позицию, чтобы найти соответствующий объект в вашей модели данных, и найдите значение

Если все, что вы хотите отобразить в Spinner, это просто текстовое представление каждого элемента в модели данных, вы можете пропустить пользовательский Adapter - просто используйте ArrayAdapter<YourModelClass> и переопределите toString() на YourModelClass чтобы вернуть любой отображаемый текст, который вы хотите.

...