Cómo agregar el artículo a Spinner's ArrayAdapter?

Tenía un EditText, un botón y un spinner. Cuando haga clic en el botón, el hilandero agregará un nuevo elemento con el nombre que ingresó en el EditText. Pero aquí está la pregunta, mi método de adaptador.add () parece que no funciona … aquí está mi código:

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) { }}); } 

}

¡Gracias! Aún esperando

Cuando ha creado su ArrayAdapter no le ha asignado una lista redimensionable, por lo que cuando agrega () no puede incrementar el tamaño de la misma y lanza una UnsupportedOperationException.

Intente algo como esto:

 List<CharSequence> planets = new ArrayList<CharSequence>(); adapter = new ArrayAdapter<CharSequence>(context, R.array.planets_array, planets); //now you can call adapter.add() 

Usted debe usar una lista. Con un Array como CharSequence [] obtendría la misma excepción UnsupportedOperationException.

Javi tiene razón excepto que no hace referencia a una matriz para el segundo parámetro.

 adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, someList); 

Creo que esto está funcionando como se diseñó, pero no como se esperaba. ArrayAdapter utilizado para tomar sólo una matriz, pero el constructor de la lista se agregó más tarde. Supongo que su justo hacer un toArray () en su lista. Esta es la razón por la que tiene que llamar a agregar en el adaptador, o crear un nuevo adaptador cuando cambia su lista.

Usted puede crear un arraylist y copiar todo el recurso a este objeto entonces crea el arrayadaptor y envía este arraylist y en onclicklistener del botón, agrega el contenido de edittext al objeto del arraylist entonces llama notifydatasetchanged de adator

  • Cómo escribir un filtro personalizado para ListView con ArrayAdapter
  • ¿Por qué getView devuelve objetos convertView incorrectos en SeparatedListAdapter?
  • NullPointerException en CustomArrayAdapter
  • ¿Cómo puedo obtener notifyDatasetChanged () para trabajar con un ListAdapter?
  • Los datos extraídos de FirebaseDatabase se muestran en 3 AlertDialogs separados en lugar de uno
  • ListView con ArrayAdapter y ViewHolder añadiendo iconos al ítem equivocado
  • ¿Cuál es la diferencia entre BaseAdapter y ArrayAdapter?
  • ¿Está bien cambiar el adaptador de ListView de forma dinámica?
  • Filtro ListView con arrayadapter
  • ListView con disposición de filas personalizada - Android
  • Android - ListView para cargar más elementos al llegar al final
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.