Autore Topic: Aggiornamento View Pager  (Letto 458 volte)

Offline FabrizioMarquez

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg l70
  • Sistema operativo:
    Android
Aggiornamento View Pager
« il: 27 Settembre 2015, 20:49:20 CEST »
0
Salve, Ho un View Pager che popolo con 3 fragment nel quale aggiornano delle text View da un SharedPreferences e popolo in view pager tramite un FragmentStatePagerAdapter! mi chiedo come faccio a far si che le mie View siano "Aggiornate", mi spiego, magari la pagina 1 influenza sullo SharedPreferences  del fragment 2 ma quando cambio fragment del view pager non riuslta aggiornato, e risulta allo stato della creazione! Come posso fare a risolvere questo problema??? Grazie in anticipo

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Aggiornamento View Pager
« Risposta #1 il: 28 Settembre 2015, 08:18:17 CEST »
0
Se non ricordo male FragmentStatePagerAdapter è usato quando hai necessita d avere molte pagine. Esempio se vuoi implementare la lettura di un libro, avrai almeno 100 pagine cartacee e quind 300 e passa sul telefono.
Io ho usato FragmentPagerAdapter e i fragment non sono ricreato ogni volta. Tale classe ha per default un numero che esprime quanti fragment tenere in memoria. Il numero è 3. Quindi se metto 4 fragment e passo dal primo all' uttimo, nel momento che ripasso al primo, esso viene ricreato. E' consigliabile non modificare tale numero anche se esiste un metodo da chiamare sul pager.

Offline FabrizioMarquez

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg l70
  • Sistema operativo:
    Android
Re:Aggiornamento View Pager
« Risposta #2 il: 28 Settembre 2015, 10:13:42 CEST »
0
Il punto è che io ho proprio 3 pagine e magari passo dalla prima alla seconda e il fragment della seconda pagina deve aggiornarsi, dovuto a cambiamenti fatti nella prima, solo che il FragmentPageAdapter mantiene in memoria e non aggiorna!

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Aggiornamento View Pager
« Risposta #3 il: 28 Settembre 2015, 10:18:05 CEST »
0
A ok scusa. Avevo capito un altra cosa.

E' normale che accada questo.
Hai un po di alternative:

1 - Usa la libreria EventBus. in pratica i fragment  si registrano a degli eventi. E tu crei gli eventi dove vuoi (es click su un bottone). Quando i fragment ricevono l'evento allora puoi eseguire il codice che vuoi.

2 - Guarda come avviene la comunicazione fra i fragment: http://developer.android.com/training/basics/fragments/communicating.html

Online iClaude

  • Utente normale
  • ***
  • Post: 246
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Aggiornamento View Pager
« Risposta #4 il: 28 Settembre 2015, 11:28:20 CEST »
0
È un tipico esempio di applicazione del pattern Observer:
https://it.m.wikipedia.org/wiki/Observer_pattern

Nel caso specifico di modifiche fatte sulle SharedPreferences Android già implementa questo pattern attraverso l'interfaccia OnSharedPreferenceChangeListener

In pratica nella tua Activity implementi tale interfaccia; attraverso i suoi metodi vieni notificato del cambio delle preferenze; quindi comunichi tali modifiche ai Fragment interessati.

Offline FabrizioMarquez

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg l70
  • Sistema operativo:
    Android
Re:Aggiornamento View Pager
« Risposta #5 il: 28 Settembre 2015, 17:22:48 CEST »
0
ok ho provato utilizzando OnSharedPreferenceChangeListener, impostando in ogni S.P dei fragment il registerOnSharedPreferenceChangeListener e notificando all'adapter del ViewPage ogni volta che vi è un cambiamento dello S.P con un adapter.notifyDataSetChanged(), questo metodo funziona anche, il problema è che rende lentissimi i caricamenti, per esempio se sono nel fragment 3 e modifico uno SharedPreference si blocca qualche millisecondo e poi ritorna a funzionare( si blocca per aggiornare i fragment, riRiempendo l'adapter) ma è un caricamento troppo Lungo! mi viene anche scritto nel log tipo:"Skipped 64 frames!",
Quello che chiedo ora è come risolvere questo problema di "Velocità" o meglio, LEggerezza!

Online iClaude

  • Utente normale
  • ***
  • Post: 246
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Aggiornamento View Pager
« Risposta #6 il: 28 Settembre 2015, 19:00:47 CEST »
0
ok ho provato utilizzando OnSharedPreferenceChangeListener, impostando in ogni S.P dei fragment il registerOnSharedPreferenceChangeListener e notificando all'adapter del ViewPage ogni volta che vi è un cambiamento dello S.P con un adapter.notifyDataSetChanged(), questo metodo funziona anche, il problema è che rende lentissimi i caricamenti, per esempio se sono nel fragment 3 e modifico uno SharedPreference si blocca qualche millisecondo e poi ritorna a funzionare( si blocca per aggiornare i fragment, riRiempendo l'adapter) ma è un caricamento troppo Lungo! mi viene anche scritto nel log tipo:"Skipped 64 frames!",
Quello che chiedo ora è come risolvere questo problema di "Velocità" o meglio, LEggerezza!

Ora non ricordo esattamente come funziona l'adapter, ma la mia idea è questa:
- registri un unico listener nell'Activity principale dove ricevi le notifiche sul cambio preferenze e ricavi i nuovi valori
- comunichi i nuovi valori ai fragment interessati, ad esempio impostando determinate variabili interne al fragment
- solo quando il fragment diventa visibile imposti i nuovi valori sul layout
Forse si può proprio evitare di richiamare notifyDataSetChanged? prova...

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Aggiornamento View Pager
« Risposta #7 il: 28 Settembre 2015, 19:21:44 CEST »
0
Puoi anche avere un listener sul cambio pagina nella tu activity e chiamare un metodo pubblico dei vari fragment