2012-03-17 10 views
14

Este es mi códigovista de lista no se actualiza con notifydatasetchanged() llamar

listview =(ListView) findViewById(R.id.lv1); 


    ArrayList<SClass> Monday = new ArrayList<SClass>(); 

    SClass s1=new SClass(); 
    s1.sName="samp"; 
    s1.salary=1000; 
    Monday.add(s1); 
    temp=Monday; 
    adapter = new CustomAdap(this, temp); 
    listview.setAdapter(adapter); 

El código anterior funciona fine.But cuando cambio mi código para esta

listview =(ListView) findViewById(R.id.lv1); 


    adapter = new CustomAdap(this, temp); 

    SClass s1=new SClass(); 
    s1.sName="samp"; 
    s1.salary=1000; 
    Monday.add(s1); 
    temp=Monday; 

    listview.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 

Listview no muestra anything.what ¿es el problema?

+0

Esto sería más claro si se entregue la fuente de CustomAdap y lunes, así como donde se declaró el lunes. – louielouie

+0

he agregado el código para customadap y el lunes es un Arraylist de SClass –

+0

@TariqIbrahim ¿Puedes ver http://stackoverflow.com/questions/28148618/listview-not-refreshing-after-click-on-button –

Respuesta

17

Parece que está cambiando la colección con la que inicializó el adaptador. Me gustaría cambiar el código de esta manera:

// initial setup 
listview =(ListView) findViewById(R.id.lv1); 
ArrayList<SClass> Monday = new ArrayList<SClass>(); 
adapter = new CustomAdap(this, Monday); 
listview.setAdapter(adapter); 

// change your model Monday here, since it is what the adapter is observing 
SClass s1=new SubjectClass(); 
s1.sName="samp"; 
s1.salary=1000; 
Monday.add(s1); 

// notify the list that the underlying model has changed 
adapter.notifyDataSetChanged(); 

Tenga en cuenta que si su CustomAdap era una subclase de ArrayAdapter, podría también haber hecho

// change your array adapter here 
SClass s1=new SubjectClass(); 
s1.sName="samp"; 
s1.salary=1000; 
adapter.add(s1); 

// notify the list that the underlying model has changed 
adapter.notifyDataSetChanged(); 

EDIT: entiendo más lo que quiere hacer ahora gracias a tu comentario Es probable que desee que el adaptador reemplace su contenido con sus diferentes ArrayLists. Haría que tu CustomAdap sea una subclase de ArrayAdapter.

A continuación, se puede utilizar de esta manera:

// replace the array adapters contents with the ArrayList corresponding to the day 
adapter.clear(); 
adapter.addAll(MONDAY); 

// notify the list that the underlying model has changed 
adapter.notifyDataSetChanged(); 
+0

Mi objetivo al usar la temperatura es porque, tengo diferentes listas de arreglos, lunes martes, etc.Me gustaría copiar los diferentes contenidos de la pantalla en diferentes días, por lo que utilizo una temperatura de arraylist y la temperatura puede asignarse a los valores de cualquiera de las listas de arreglos el lunes, el martes, etc. –

+0

no hay un método llamado addAll –

+2

Su CustomAdap tendrá que subclase ArrayAdapter, que incluye 'clear' y' addAll'. Algo así como 'public class CustomAdap extiende ArrayAdapter '. Por favor, consulte http://developer.android.com/reference/android/widget/ArrayAdapter.html para referencia. – louielouie

5

¿Por qué funciona en el primer código?

--- Debido a que usted está configurando los valores de temp Lista y pasándole el adapter y se nota en listview.

¿Por qué no funciona en el segundo código?

--- Debido a que se está configurando temp al adaptador mucho antes de establecer el valor de temperatura en
segundo, su clase de adaptador podría no conseguir el valor actualizado cuando se establece un nuevo valor a temp ..que porque la temperatura no es pública o no está a nivel de clase o no estática .. Ponga la declaración de temperatura en el nivel raíz e intente.

Y muestre su código completo tanto como sea necesario y Logcat si recibe alguna advertencia que también.

+0

¿Qué quieres decir? por nivel de raíz? –

+0

Quiero decir a nivel de clase/actividad .. – MKJParekh

+1

@MKJParekh Agradable Explicación. Me ayudó. Gracias –

4

Busque un enlace a la vista a la que se hace referencia en el archivo xml adecuado. O al menos verificar la existencia de dicho archivo xml.

3

¿Qué adaptador estás usando? Es claramente un caso en el que su adaptador no se actualiza después de configurar los datos en su variable de temperatura.

+0

entonces, ¿cómo podemos obtener eso? –

Cuestiones relacionadas