Как добавить элемент в Spinner ArrayAdapter?

У меня был EditText, кнопка и счетчик. При нажатии на кнопку счетчик добавит новый элемент с именем, введенным вами в EditText. Но вот вопрос, мой метод adapter.add() кажется не работает... вот мой код:

public class Spr extends Activity {
Button bt1;
EditText et;
ArrayAdapter<CharSequence> adapter;
Spinner spinner;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    bt1 = (Button)this.findViewById(R.id.bt1);
    et = (EditText)this.findViewById(R.id.et);  
    spinner = (Spinner)this.findViewById(R.id.spr);

    adapter = ArrayAdapter.createFromResource(
            this, R.array.planets_array, android.R.layout.simple_spinner_item);

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    spinner.setAdapter(adapter);

    bt1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            String temp = et.getText().toString();

            adapter.add(temp);
            adapter.notifyDataSetChanged();
            spinner.setAdapter(adapter);

        }
    });


    spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){

        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int pos, long id) {

            Toast.makeText(parent.getContext(), "The planet is " +
                      parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {

        }});
}

}

спасибо!... все еще ждал

Ответы

Ответ 1

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

Попробуйте что-то вроде этого:

List<CharSequence> planets = new ArrayList<CharSequence>();
adapter = new ArrayAdapter<CharSequence>(context,
                       R.array.planets_array, planets);
//now you can call adapter.add()

Вы должны использовать Список. С помощью массива, такого как CharSequence [], вы получите такое же исключение UnsupportedOperationException.

Ответ 2

Javi прав, но не ссылайтесь на массив для второго параметра.

adapter = new ArrayAdapter<CharSequence>(this,
  android.R.layout.simple_spinner_item,
  someList);

Ответ 3

Я считаю, что это работает как разработанное, но не так, как ожидалось. ArrayAdapter используется только для принятия массива, но конструктор списка был добавлен позже. Я предполагаю, что он просто делает toArray() в вашем списке. Вот почему вам нужно либо называть добавление на адаптере, либо создавать новый адаптер при изменении списка.

Ответ 4

вы можете создать arraylist и скопировать все обращения к этому объекту, затем создать arrayadaptor и отправить этот arraylist и в onclicklistener кнопки, добавить edittext-контент в объект arraylist, а затем вызвать notifydatasetchanged из adator