android - studio - ¿Cómo actualizar un spinner dinámicamente?
spinner en android (10)
Cuando haya cambiado los datos en su lista y cuando quiera actualizar la rueda giratoria,
Crea un nuevo objeto del adaptador y configúralo al hilandero. Funcionará seguro.
La mejor de las suertes.
Editar: También necesita llamar a NotifyDataSetChanged () en el adaptador.
He estado intentando actualizar mi spinner en Android dinámicamente, pero nada de lo que intenté ha funcionado.
Este es el siguiente código que estoy usando para actualizar la ruleta.
typeList = dbAdapter.getList(); //array list with the values
adapter.notifyDataSetChanged();
groupSpinner.postInvalidate();
groupSpinner.setAdapter(adapter);
Los valores de typeList son correctos pero no se están actualizando en el Spinner.
¿Hay un error tipográfico o algo? ¿Cuál es la diferencia entre dbAdapter
y adapter
. Si el Spinner ya tiene el adaptador, no tiene que volver a asignarlo. notifyDataSetChanged
, lo único que tiene que hacer es actualizar el adaptador y llamar notifyDataSetChanged
método notifyDataSetChanged
.
typeList = adapter.getList(); //array list with the values
// change the values, and then
adapter.notifyDataSetChanged();
Aparentemente, después de hacer typeList = dbAdapter.getList()
, la variable typeList
apunta a una Lista diferente en lugar de la que introdujo originalmente en el adaptador y el adaptador sería algo confuso.
Entonces deberías usar el siguiente código:
typeList.clear();
typeList.addAll(dbAdapter.getList());
Cambie los datos subyacentes y llame a notifyDataSetChanged () en el adaptador.
list.clear();
list.add("A");
list.add("B");
dataAdapter.notifyDataSetChanged();
Cuando se configura el adaptador spinner agregar
spinnerAdapter.setNotifyOnChange(true);
A partir de entonces, cuando agregue nuevos datos, se actualizará automáticamente.
Después de cambiar sus datos, deberá agregar el siguiente código:
typeList = dbAdapter.getList()
adapter = new ArrayAdapter<String>(v.getContext(),
android.R.layout.simple_spinner_dropdown_item,typeList);
groupSpinner.setAdapter(adapter);
El uso de agregar / quitar en su adaptador y el uso de notifyDataSetChanged () le permite no tener que crear nuevos adaptadores una y otra vez.
Declara tu adaptador global
ArrayAdapter<Object> adapter;
Cuando agrega algo a la Lista de objetos al que se adjunta el adaptador (Cadenas o cualquier objeto que use) agregue una función de agregar al adaptador y llame a notifyDataSetChanged:
adaper.add(Object);
adapter.notifyDataSetChanged();
y cuando eliminas un elemento de la lista agrega también:
adapter.remove(Object);
adapter.notifyDataSetChanged();
En realidad, tiene que llamar a borrar / agregar en el adaptador, o crear y configurar un nuevo adaptador. El adaptador no conserva una referencia a su lista (solo está llamando a Array en su lista en la construcción), por lo que no hay forma de que se actualice.
dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, newStringList);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerCategory.setAdapter(dataAdapter);
No puede simplemente modificar la List
original y luego llamar a notifyDataSetChanged()
como en otros adaptadores, ya que no se aferra a la List
original. Sin embargo, puede obtener el mismo resultado utilizando el adaptador, así:
spinnerAdapter.clear();
spinnerAdapter.addAll(updatedListData);
spinnerAdapter.notifyDataSetChanged(); // optional, as the dataset change should trigger this by default
Basado en una respuesta del usuario 392117 ( https://.com/a/38738734/1508887 )
Solo necesita llamar a setAdapter () una vez y llamar a adapter.notifyDataSetChanged() para actualizar los datos.