Как добавить элемент в 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