我有一个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) {
}});
}
}
谢谢! ......还在等待
答案 0 :(得分:14)
创建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异常。
答案 1 :(得分:3)
Javi是正确的,除了不为第二个参数引用数组。
adapter = new ArrayAdapter<CharSequence>(this,
android.R.layout.simple_spinner_item,
someList);
答案 2 :(得分:1)
我相信这是按设计工作的,但并不像预期的那样。 ArrayAdapter过去只使用数组,但稍后添加了列表构造函数。我猜它只是在你的列表上做一个toArray()。这就是您必须在适配器上调用add或在List更改时创建新适配器的原因。
答案 3 :(得分:0)
你可以创建一个arraylist并复制所有求助于这个对象然后创建arrayadaptor并发送这个arraylist并在onclicklistener的按钮中,将edittext内容添加到arraylist对象然后调用adifydatasetchanged of adator