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

Идентификатор установки для элементов Spinner

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

4b9b3361

Ответ 1

Что вы подразумеваете под идентификатором. Вы можете использовать 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   
}

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

Ответ 2

Создайте класс 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;
}

вуаля!   }

Ответ 3

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

Я думаю, что самый простой способ привязать такой идентификатор должен был бы либо к жесткому коду (если вы используете статический текстовый ресурс), либо к динамической сборке (если вы получите строки во время выполнения) отображение из (String position in массив) → (первичный ключ).

EDIT: С другой стороны, у Mojo Risin есть точка - вы должны проверить, действительно ли API CursorAdapter делает то, что вам нужно.

Ответ 4

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

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

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

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

yourSpinner.getSelectedView().getTag();

Ответ 5

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