14

我有一个 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) {

        }});
}

}

谢谢!……还在等

4

4 回答 4

15

当您创建 ArrayAdapter 时,您还没有为其分配可调整大小的列表,因此当您执行 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 异常。

于 2010-10-26T11:56:25.893 回答
3

Javi 是对的,只是不要为第二个参数引用数组。

adapter = new ArrayAdapter<CharSequence>(this,
  android.R.layout.simple_spinner_item,
  someList);
于 2010-11-04T20:54:42.043 回答
1

我相信这是按设计工作的,但没有按预期工作。ArrayAdapter 以前只取一个数组,后来添加了列表构造函数。我猜它只是在你的列表上做一个 toArray() 。这就是为什么您必须在适配器上调用 add 或在 List 更改时创建新适配器的原因。

于 2010-07-20T03:53:10.173 回答
0

您可以创建一个arraylist并将所有资源复制到该对象,然后创建arrayadaptor并发送此arraylist,然后在按钮的onclicklistener中,将edittext内容添加到arraylist对象,然后调用adator的notifydatasetchanged

于 2014-04-14T20:01:28.960 回答