Подтвердить что ты не робот

Установка значений и отображение текста в Android Spinner

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

mySpinner.setAdapter(myAdapter);

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

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

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

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

Пример:

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

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

Я надеюсь, что этот пример поставил мой вопрос немного более ясным...

Thankx

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Если вы не хотите создавать свой собственный класс адаптера, вы можете вместо этого обернуть ваши данные тем, что возвращает 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();
}