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) {
}});
}
}
ありがとう! ...まだ待っています
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例外が発生します。
Javiは、2番目のパラメーターの配列を参照しないことを除いて正しいです。
adapter = new ArrayAdapter<CharSequence>(this,
Android.R.layout.simple_spinner_item,
someList);
これは設計どおりに機能していると思いますが、期待どおりではありません。 ArrayAdapterは以前は配列のみを取得していましたが、リストコンストラクターは後で追加されました。私はそれがあなたのリストでtoArray()をしているだけだと思います。これが、アダプタでaddを呼び出すか、リストが変更されたときに新しいアダプタを作成する必要がある理由です。