2013-04-25 11 views
8

Ho ViewPager che sto usando per la visualizzazione di alcuni frammenti, ho anche TextView sul mio FragmentActivity. Devo cambiare il testo in TextView a seconda del frammento attualmente selezionato in ViewPager. Il problema che ho dovuto affrontare: ViewPager ha un meccanismo di memorizzazione nella cache, crea un'istanza dei frammenti prima che siano realmente visibili per l'utente, ad esempio quando seleziono la seconda pagina nel frammento ViewPager sulla terza pagina anch'essa creata. Inoltre, non riesco a determinare all'interno del frammento questo frammento è visibile o è appena stato creato da ViewPager, ma non è realmente visibile all'utente. Ho provato ad utilizzare OnPageChangeListener per questo, ma le modifiche apportate in essa era inaccettabile lento per me (pagina scorrere e poi il mio TextView sono cambiati)

Quello che realmente bisogno: ho bisogno per determinare quale frammento è attualmente visibile in ViewPager, indipendentemente dallo FragmentActivity o dallo stesso Fragment. Come posso raggiungere questo obiettivo?Determinare quale frammento è attualmente visibile in ViewPager

risposta

7

ViewPager.OnPageChangeListener è l'approccio ovvio qui. E come hai notato, onPageSelected(int position) non viene chiamato fino a quando la pagina non viene centrata (se stai scorrendo lentamente la pagina toccando e tenendo premuto).

Quello che realmente bisogno: ho bisogno di determinare quale frammento è attualmente visibile in ViewPager, non importa da FragmentActivity o dal frammento stesso. Come posso raggiungere questo obiettivo?

Innanzitutto, non è stato definito "attualmente visibile". In uno ViewPager, si possono vedere 2 pagine mentre si scorre tra di esse, quindi quale è "al momento visibile" a metà passaggio? La mia ipotesi è che tu considereresti la pagina "più visibile" come "attualmente visibile".

Detto questo, vorrei esaminare utilizzando onPageScrolled (int position, float positionOffset, int positionOffsetPixels). Sembra che positionOffset possa essere in grado di darti le informazioni che ti servono. Lo testerei con alcune dichiarazioni di registrazione per vedere quali dati restituiscono.

Problemi correlati