Autore Topic: Aggiornare listview prima di andare in pausa  (Letto 579 volte)

Offline elfo83

  • Utente normale
  • ***
  • Post: 283
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Aggiornare listview prima di andare in pausa
« il: 02 Agosto 2013, 19:42:12 CEST »
0
Ciao a tutti, è da un paio di giorni che sto cercando di risolvere un problema che pensavo fosse semplice ma in realtà mi sta dando diverse noie. Praticamente, nella mia applicazione ho un TabHost con 5 possibilità di scelta. Ogni qual volta clicco su un suo elemento mi sposto da un'activity ad un'altra. In un'activity ho una pulltorefresh listview che posso allungare a seconda di quante volte voglio. L'obiettivo è quello di resettare la lista ai primi 25 elementi caricati in partenza, ogni volta che esco  dell'attività in cui c'è la mia listview, in modo tale da rilasciare risorse. Gli elementi della lista vengono caricati 25 alla volta chiamando uno script e passando un'indice. Ho pensato di resettare i miei adapter, arrayList vary che uso per popolare la lista e richiamare lo script nel metodo onPause(). Avevo pensato questo in modo tale da fare tutto quello che devo prima che l'attività si sospenda. Nella maggior parte delle volte funziona ma a volte entro nell'onPause(), vado a chiamare il mio script ma evidentemente non ho il tempo materiale di ottenere i suoi risultati prima che l'attività vada in pausa. Conseguentemente quando torno nella mia attività non ho nessun'elemento caricato. Secondo voi qual'è il modo + efficiente per riportare la mia lista ai suoi primi 25 elementi caricati prima che vado in pausa? Grazie

Offline Devy

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
Re:Aggiornare listview prima di andare in pausa
« Risposta #1 il: 03 Agosto 2013, 01:57:42 CEST »
0
Come recuperi i dati? Usi un asynctask? Come dici tu può accadere che il rendering della UI preceda il reperimento dei 25 elementi...o metti un loader nell'onResume che aspetta di recuperarli o li salvi in cache.

Offline elfo83

  • Utente normale
  • ***
  • Post: 283
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:Aggiornare listview prima di andare in pausa
« Risposta #2 il: 03 Agosto 2013, 05:06:45 CEST »
0
Per i dati uso un Thread separato. Dovrei cambiare la lista prima di andare in pausa e non nell'onResume()

Offline Devy

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
Re:Aggiornare listview prima di andare in pausa
« Risposta #3 il: 03 Agosto 2013, 09:13:14 CEST »
0
Per i dati uso un Thread separato. Dovrei cambiare la lista prima di andare in pausa e non nell'onResume()

Non ti seguo...puoi recuperare i dati "default" quando va in pausa (recuperare, non metterli nella listview) salvarli e poi nell'onResume inserirli nella lista. In questo modo il thread secondario ha il tempo di ottenerli.

Offline elfo83

  • Utente normale
  • ***
  • Post: 283
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:Aggiornare listview prima di andare in pausa
« Risposta #4 il: 03 Agosto 2013, 15:08:10 CEST »
0
Per ottenere i dati devo chiamare uno script. Non so se riesco ad ottenere i dati prima che l'attività vada in onPause()...comunque come idea non è male. Ho solo dubbi sul fatto di ottenere quello che voglio prima che l'attività sia sospesa..chi me lo garantisce dato che lo sto facendo con un Thread esterno alla UI?

Offline Devy

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
Re:Aggiornare listview prima di andare in pausa
« Risposta #5 il: 04 Agosto 2013, 09:29:57 CEST »
0
È proprio il mestiere dei thread secondari effettuare operazioni che richiedono diverso tempo per poi notificare la UI al termine del lavoro. Comunque se i dati di default rimangono sempre quelli, puoi anche pensare di recuperarli una volta per tutte quando crei l'activity, salvarli da qualche parte e la volta dopo evitare di dover richiamare lo script.

P.S. hai preso in considerazione l'idea di usare i fragments come tab invece delle activity?

Offline elfo83

  • Utente normale
  • ***
  • Post: 283
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:Aggiornare listview prima di andare in pausa
« Risposta #6 il: 04 Agosto 2013, 15:38:20 CEST »
0
I dati arrivano dalla risposta del server e sono una lista di attività che gli utenti fanno, quindi si aggiorna in tempo reale. Quindi Non credo sia una buona cosa salvarli una volta per tutte. A parte che sono veramente a digiuno con i fragments, dovrei cambiare molte cose nell'applicazione e non ho molto tempo dato che dovrebbe uscire a breve. Stavo pensando che una possibile soluzione poteva essere quella di aggiornare la lista ogni volta che entro nell'onResume() ma è il problema è che la lista dovrebbe aggiornarsi solo ogni volta che cambio tab e poi ritorno sulla lista. Non dovrebbe agiornarsi invece quando dall'attività in cui c'è la lista, mediante bottoni e cose varie vado su altre attività e poi ritorno all'attività della lista. L'unico modo che mi viene in mente è quello di aggiornare la lista in onPause() ma in questo modo, la lista si aggiornerebbe in tutti i casi e non solo quando voglio io.

Post unito: 05 Agosto 2013, 21:35:27 CEST
Credo di aver risolto in questo modo:
1) quando faccio la prima chiamata del mio script in cui ottengo i primi 25 risultati della lista, li salvo in una stringa. In questo modo, anche quando faccio il pullToRefresh verso il basso e aggiungo altri elementi alla mia lista, avrò salvato sempre e solo i primi 25.
2) Non faccio nulla nel metodo onPause() e onStop().
3) Nel metodo onResume(), se si verificano certe condizioni, resetto le le liste e l'adapter che uso e richiamo il metodo che impiego per popolare la listView dopo aver chiamato lo script. Questa volta non ci son problemi a farlo nell'onResume() perchè non devo aspettare nessuna risposta del server, in quanto ce l'ho già.

Provo ad implementare il tutto e vi faccio sapere se ho risolto. Grazie comunque a Devy per l'idea.
« Ultima modifica: 05 Agosto 2013, 21:35:27 CEST da elfo83, Reason: Merged DoublePost »