Android: создать / обновить Spinner из ArrayList, как? - PullRequest
0 голосов
/ 11 декабря 2011

При запуске программы Spinner создается с помощью

    Spinner spinner = (Spinner) findViewById(R.id.spinner);
    spinnerAdapter = ArrayAdapter.createFromResource(
            this, R.array.IDs, android.R.layout.simple_spinner_item);
    spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(spinnerAdapter);

    spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());

в более поздней точке, все записи должны быть заменены элементами из ArrayList.При использовании Spinner мне интересна только строка.При отображении и позже в алгоритме.

Как бы вы это сделали?

for (String object:out){
    System.out.println("added to spinner: "+object);
    spinnerAdapter.add(object);
    }


    spinnerAdapter.notifyDataSetChanged();

Это была моя идея, но она кажется слишком простой, поскольку она только генерирует исключения.

Редактировать:

Как и просили, здесь сгенерировано исключение ..

12-11 15:11:38.538: I/System.out(280): added to spinner: TheSwitch 12-11 15:11:38.548: W/dalvikvm(280): threadid=7: thread exiting with uncaught exception (group=0x4001d800) 12-11 15:11:38.568: E/AndroidRuntime(280): FATAL EXCEPTION: Thread-8 12-11 15:11:38.568: E/AndroidRuntime(280): java.lang.UnsupportedOperationException 12-11 15:11:38.568: E/AndroidRuntime(280):    at java.util.AbstractList.add(AbstractList.java:411) 12-11 15:11:38.568: E/AndroidRuntime(280):     at java.util.AbstractList.add(AbstractList.java:432) 12-11 15:11:38.568: E/AndroidRuntime(280):     at android.widget.ArrayAdapter.add(ArrayAdapter.java:178) 12-11 15:11:38.568: E/AndroidRuntime(280):    at de.enocean.EnOceanAppActivity.updateSpinner(EnOceanAppActivity.java:109) 12-11 15:11:38.568: E/AndroidRuntime(280):  at de.enocean.EnOceanAppActivity$1.useNotifyMessage(EnOceanAppActivity.java:222) 12-11 15:11:38.568: E/AndroidRuntime(280):     at de.enocean.EnOceanAppActivity$1.run(EnOceanAppActivity.java:179) 12-11 15:11:38.568: E/AndroidRuntime(280):  at java.lang.Thread.run(Thread.java:1096)

1 Ответ

2 голосов
/ 11 декабря 2011

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

String[] myStrings = {"One", "Two", "Three" };
ArrayAdapter<String> adapter = new ArrayAdapter(YourActivity.this, android.R.simple_spinner_adapter, myStrings);
spinner.setAdapter(adapter);

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

...