2012-03-17 13 views
14

Questo è il mio codiceListView non aggiornare con notifydatasetchanged() chiamata

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

Il codice precedente funziona fine.But quando cambio il mio codice a questo

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 non mostrare anything.what è il problema?

+0

Questo sarebbe più chiaro se hai fornito la fonte per CustomAdap e Lunedi, così come dove è dichiarato Lunedi. – louielouie

+0

ho aggiunto il codice per customadap e lunedì è un Arraylist di SClass –

+0

@TariqIbrahim puoi vedere http://stackoverflow.com/questions/28148618/listview-not-refreshing-after-click-on-button –

risposta

17

Sembra che tu stia modificando la raccolta con cui hai inizializzato l'adattatore. Vorrei cambiare il codice in questo modo:

// 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(); 

Nota che se il CustomAdap era una sottoclasse di ArrayAdapter, si potrebbe anche aver fatto

// 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: ho capito più ciò che vuoi fare ora grazie del tuo commento Probabilmente vorrai che l'adattatore sostituisca il suo contenuto con i tuoi diversi ArrayList. Vorrei rendere CustomAdap una sottoclasse di ArrayAdapter.

Quindi è possibile utilizzare in questo modo:

// 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

Il mio obiettivo è usare temp, perché ho arraylists diversi, lunedì martedì ecc.mi piacerebbe copiare il display diversi contenuti in giorni diversi, ed è per questo che uso un arraylist temp.and temp possono essere assegnati i valori da uno qualsiasi degli arraylists lunedì, martedì ecc. –

+0

non esiste un metodo chiamato addAll –

+2

Your CustomAdap dovrà sottoclasse ArrayAdapter, che include 'clear' e' addAll'. Qualcosa come 'CustomAdap di classe pubblica estende ArrayAdapter '. Si prega di consultare http://developer.android.com/reference/android/widget/ArrayAdapter.html per riferimento. – louielouie

5

Perché funziona nel primo codice?

--- Perché si sta impostando i valori da temp List e passandogli il adapter e si vede in listview.

Perché non funziona nel secondo codice?

--- Perché si sta impostando temperatura all'adattatore lontano prima di impostare il valore in temperatura
secondo, la classe adattatore potrebbe non ottenere il valore aggiornato quando si imposta il nuovo valore di temperatura ..che perché temp non è pubblico o non a livello di classe o non statico .. Inserisci la dichiarazione temp a livello di root e prova.

E si prega di mostrare il vostro codice completo tanto quanto richiesto e Logcat se si ottiene qualsiasi avviso di anche.

+0

cosa intendi per livello di root? –

+0

Intendo dire a livello di classe/attività .. – MKJParekh

+1

@MKJParekh Bella spiegazione. Mi ha aiutato. Grazie –

4

Verificare il collegamento alla vista di riferimento nel file xml corretto. O almeno controllare l'esistenza di detto file xml.

3

Quale adattatore stai usando? È chiaramente un caso in cui l'adattatore non viene aggiornato dopo aver impostato i dati nella variabile temporanea.

+0

quindi come possiamo ottenerlo? –

Problemi correlati