Измените адаптер спиннера во время выполнения, используя onItemSelectedListener - PullRequest
1 голос
/ 26 мая 2011

Это мой код

[...]
final String[] top_spinner_items = new String[35];
for (int i = 0; i < top_spinner_items.length; i++) {
    top_spinner_items[i] = Integer.toString(i+1);
}
ArrayAdapter<String> spn_topItemsAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, top_spinner_items);
spn_topItemsAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
[...]



AdapterView.OnItemSelectedListener lst_bottomSpinner_changed_element = new OnItemSelectedListener() {

    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
        //
        final String[] top_spinner_items = new String[35];
        for (int i = 0; i < top_spinner_items.length; i++) {
            top_spinner_items[i] = Integer.toString(i+1);
        }
        ArrayAdapter<String> spn_topItemsAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, top_spinner_items);
        spn_topItemsAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    }

    public void onNothingSelected(AdapterView<?> parentView) {
        // your code here
    }

};

(все отсутствующие ссылки в коде находятся между или перед кодом)

У меня вопрос, почему внутри AdapterView.OnItemSelectedListener

ArrayAdapter<String> spn_topItemsAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, top_spinner_items);

выдает ошибку. Там написано "конструктор не определен". Я пытался использовать android.widget.ArrayAdapter, но ничего не получил. Я пытаюсь сменить адаптер вращателя, когда предыдущий вращатель меняется (я хочу, чтобы у второго счетчика было значение, установленное в предыдущем)

У вас есть идеи?

1 Ответ

2 голосов
/ 26 мая 2011

Вы получили ошибку компиляции, потому что вы передаете экземпляр AdapterView.OnItemSelectedListener в конструктор адаптера вместо контекста. Измените ваш код в onItemSelected, добавив имя класса вашего Activity до this:

ArrayAdapter<String> spn_topItemsAdapter = new ArrayAdapter<String>(YourActivity.this,
            android.R.layout.simple_spinner_item, top_spinner_items);

И вы пропустили установку адаптера на ListView в inItemSelected, как parentView.setAdapter(spn_topItemsAdapter);.
Тем не менее, я думаю, что замена всего адаптера в onItemSelected не очень хорошая идея. Вам лучше изменить существующий.

...