He estado tratando de actualizar mi spinner en android de forma dinámica, pero nada que pruebe que ha estado trabajando.

Este es el siguiente código que estoy usando para la actualización de la ruleta.

typeList = dbAdapter.getList(); //array list with the values

adapter.notifyDataSetChanged();
groupSpinner.postInvalidate();
groupSpinner.setAdapter(adapter);

Los valores de typeList es correcta, pero que no está siendo actualizado en el Spinner.

He arreglado esto acaba de crear un nuevo adaptador de… siento que no debería haber tenido que hacer eso.
¿Tienes una instancia de adaptador. si inicializa el adaptador de nuevo notifyDataSetChanged no funciona.

OriginalEl autor 2Real | 2010-07-19

10 Comentarios

  1. 22

    De hecho, usted tiene que llamar a borrar/añadir en el adaptador, o crear y establecer un nuevo adaptador. El adaptador no conservar una referencia a la lista (sólo llamadas toArray en su lista en construcción), así que no hay manera 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);

    OriginalEl autor AdamC

  2. 12

    Sólo necesitas llamar a setAdapter() una vez y llamar el adaptador.notifyDataSetChanged() para actualizar los datos.

    qué necesito para crear un nuevo adaptador debido a que no está funcionando? Cuando hago clic en la ruleta, los valores de la lista no se actualiza.
    He encontrado NotifyDataSetChanger() para trabajar en las Listas, pero no he visto su trabajo en los Hilanderos. Supongo que hay alguna diferencia interna que requiere la creación de un nuevo adaptador de cada momento.

    OriginalEl autor Robby Pond

  3. 11

    Simplemente no se puede modificar el original List, a continuación, llamar a notifyDataSetChanged() como en otros adaptadores, ya que no se mantiene en el original List. Sin embargo, usted puede obtener el mismo resultado utilizando el adaptador de sí mismo, así:

    spinnerAdapter.clear();
    spinnerAdapter.addAll(updatedListData);
    spinnerAdapter.notifyDataSetChanged(); //optional, as the dataset change should trigger this by default

    Basado en una respuesta de user392117 (https://stackoverflow.com/a/38738734/1508887)

    Esto debe ser aceptado como respuesta.
    Funciona sin notifyDataSetChanged() para la sustitución de la totalidad de la lista. No lo he probado sólo añadir a la lista existente. Supongo que en ese caso puede que tenga que llamar.

    OriginalEl autor Fifer Sheep

  4. 8

    Cuando usted tiene los datos cambian en su lista y cuando desea actualizar
    el girador, a continuación,

    Crear un nuevo objeto de que el adaptador y el adaptador para el
    spinner. Funcionará seguro.

    La mejor de las suertes.

    Edit: También necesita llamar notifyDataSetChanged() en el adaptador.

    OriginalEl autor Dharmendra

  5. 4

    Hay un error o algo? Cual es la diferencia entre dbAdapter y adapter. Si el Girador tiene ya el adaptador, usted no tiene que volver a asignar. Más encima, lo único que tienes que hacer es actualizar el adaptador y llame a notifyDataSetChanged método.

    typeList = adapter.getList(); //array list with the values
    //change the values, and then
    adapter.notifyDataSetChanged();
    dbAdapter es mi enlace a la base de datos adaptador es un adaptador personalizado hice que se extiende BaseAdapter e implementa SpinnerAdapter. He intentado lo que se sugiere y que no funciona.

    OriginalEl autor Cristian

  6. 1

    Cambiar los datos subyacentes y llamar a la notifyDataSetChanged() en el adaptador.

       list.clear();
      list.add("A");
          list.add("B");
      dataAdapter.notifyDataSetChanged();

    OriginalEl autor Kapil D

  7. 1

    Después de cambiar los datos, será necesario 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);

    OriginalEl autor codingForFun

  8. 0

    Al parecer, después de hacer typeList = dbAdapter.getList(), la variable typeList puntos a una Lista diferente en lugar de la que se alimenta al adaptador originalmente y el adaptador sería algo confundido.

    Por lo que debe utilizar el siguiente código:

    typeList.clear();
    typeList.addAll(dbAdapter.getList());

    OriginalEl autor kgao

  9. 0

    Al configurar el control de giro del adaptador de añadir

    spinnerAdapter.setNotifyOnChange(true);

    A partir de entonces cuando se agregan nuevos datos se actualizará automáticamente.

    Para ArrayAdapter, el valor predeterminado es ya realidad. Para el uso con los Hilanderos, haciendo esto no tiene ningún efecto – como se ha mencionado en los comentarios sobre las respuestas anteriores.

    OriginalEl autor toshkinl

  10. 0

    El uso de agregar/quitar en el adaptador y el uso de notifyDataSetChanged() le permite no tener que crear nuevos adaptadores y otra vez.

    Declarar su adaptador global

    ArrayAdapter<Object> adapter;

    Cuando usted agregar algo a la Lista de Objetos que el adaptador está conectado a (Cadenas o cualquier objeto de uso) agregar un complemento de la función del adaptador y de la llamada notifyDataSetChanged:

    adaper.add(Object);
    adapter.notifyDataSetChanged();

    y al quitar un elemento de la Lista agregar también:

    adapter.remove(Object);
    adapter.notifyDataSetChanged();

    OriginalEl autor no-name

Dejar respuesta

Please enter your comment!
Please enter your name here