Настройка идентификатора для элементов Spinner - PullRequest
30 голосов
/ 26 апреля 2011

У меня есть массив строк, которыми я заполняю объект Spinner. Тем не менее, я хотел бы прикрепить идентификатор к каждому элементу Spinner, поэтому, когда пользователь выбирает элемент, у меня есть его идентификатор, чтобы использовать его для сохранения в другой части данных. Как я могу это сделать?

Ответы [ 5 ]

37 голосов
/ 31 декабря 2013

Создайте класс StringWithTag и используйте вместо имени строки в списке, например, так: -

public class StringWithTag {
    public String string;
    public Object tag;

    public StringWithTag(String stringPart, Object tagPart) {
        string = stringPart;
        tag = tagPart;
    }

    @Override
    public String toString() {
        return string;
    }
}

в добавлении элементов в вращающуюся часть: -

List<StringWithTag> list = new ArrayList<StringWithTag>();
list.add(new StringWithTag("Oldman", "12345"));
list.add(new StringWithTag("Umpire", "987654"));
list.add(new StringWithTag("Squad", "ABCDEE"));
ArrayAdapter<StringWithTag> adap = new ArrayAdapter<StringWithTag> (this, android.R.layout.simple_spinner_item, list);
....
....

вслушатель: -

public void onItemSelected(AdapterView<?> parant, View v, int pos, long id) {
    StringWithTag s = (StringWithTag) parant.getItemAtPosition(pos);
    Object tag = s.tag;
}

вуаля!} * +1010 *

19 голосов
/ 26 апреля 2011

Что вы подразумеваете под id. Вы можете использовать ArrayAdapter для заполнения Spinner. Когда элемент выбран, просто извлеките элемент из адаптера и сохраните нужные данные.

Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<MyObject> adapter = ... // initialize the adapter
adapter.setDropDownViewResource(android.R.layout.some_view);
spinner.setAdapter(adapter);

и когда элемент выбран

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    MyObject selected = parent.getItemAtPosition(pos);
    // save any data relevant with selected item   
}

Если вы храните свои данные в БД, вы можете использовать CursorAdapter и onItemSelected, чтобы извлечь идентификатор выбранного элемента из курсора.

0 голосов
/ 22 октября 2015

Андрей Привет, это было давно, но стоит написать.

Вы можете установить тег для каждой строки, когда будете надувать spinnerLayout in SpinnerAdapter :

spinnerView = inflater.inflate(spinnerLayout, parent, false);
spinnerView.setTag("Your Tag");

И тогда вы можете получить тег с:

yourSpinner.getSelectedView().getTag();
0 голосов
/ 28 сентября 2012

Я думаю, что лучшее решение - добавить еще один счетчик и заполнить его идентификаторами, но сделать так, чтобы видимость исчезла

0 голосов
/ 26 апреля 2011

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

Я думаю, что самый простой способ прикрепить такой идентификатор - это либожесткий код (если вы используете статический текстовый ресурс) или динамическое построение (если вы получаете строки во время выполнения) отображение из (позиция строки в массиве) -> (первичный ключ).

РЕДАКТИРОВАТЬ:С другой стороны, у Mojo Risin есть смысл: вам следует проверить, выполняет ли CursorAdapter API то, что вам нужно.

...