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

2番目のパラメーターの配列を参照しないことを除いて、Javiは正しいです。

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

これは設計どおりに機能していると思いますが、期待どおりではありません。以前は ArrayAdapter は配列のみを受け取っていましたが、リスト コンストラクターは後で追加されました。リストで toArray() を実行しているだけだと思います。これが、アダプターで add を呼び出すか、リストが変更されたときに新しいアダプターを作成する必要がある理由です。

于 2010-07-20T03:53:10.173 に答える