Как добавить элемент в ArrayAdapter Spinner? - PullRequest
14 голосов
/ 24 марта 2010

У меня был EditText, кнопка и счетчик. При нажатии на кнопку счетчик добавит новый элемент с именем, которое вы ввели в EditText. Но вот в чем вопрос, мой метод adaptor.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) {

        }});
}

}

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

Ответы [ 4 ]

14 голосов
/ 26 октября 2010

Когда вы создали свой ArrayAdapter, вы не назначили ему изменяемый список List, поэтому, когда вы делаете add (), он не может увеличить его размер и выдает исключение 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.

3 голосов
/ 04 ноября 2010

Джави прав, за исключением того, что не ссылается на массив для второго параметра.

adapter = new ArrayAdapter<CharSequence>(this,
  android.R.layout.simple_spinner_item,
  someList);
1 голос
/ 20 июля 2010

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

0 голосов
/ 15 апреля 2014

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

...