Domanda

Ho un ViewPager collegato ad un FragmentPagerAdapter che è la visualizzazione di tre frammenti. Il ViewPager sembra distruggere la visione di un frammento ospitata quando è più di un colpo di distanza dalla posizione corrente.

Questi punti di vista sono tutti gli elenchi semplici e questa ottimizzazione è completamente inutile, quindi mi piacerebbe disattivarlo. E 'causando alcuni problemi visivi, perché le liste hanno animazioni di layout applicati a loro e quelle animazioni vengono riprodotti dopo che sono stati distrutti e ricreati. Essa mostra anche la barra di scorrimento intro animazione ogni volta (dove la barra di scorrimento è visibile brevemente per indicare che lo scorrimento è possibile) che può essere fonte di distrazione, e la posizione di scorrimento corrente dell'utente è perso nel processo.

Inoltre, non caricare il terzo frammento fino al primo colpo accade, che è problematico perché ogni frammento gestisce le proprie chiamate di servizio e preferisco avere tutti e tre il fuoco fuori allo stesso tempo in cui i carichi di attività. Avere la terza chiamata di servizio in ritardo è proprio l'ideale.

C'è un modo per convincere ViewPager per fermare questo comportamento e tenere solo tutti i miei frammenti nella memoria?

È stato utile?

Soluzione

revisione 4 del pacchetto di supporto, un metodo è stato aggiunto al ViewPager che consente di specificare il numero di pagine fuori schermo da usare, piuttosto che il default che è 1.

Nel tuo caso, si desidera specificare 2, in modo che quando si è sulla terza pagina, il primo non viene distrutta, e viceversa.

mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(2);

Altri suggerimenti

Per impostazione predefinita, ViewPager ricrea i frammenti quando si scorrere la pagina. Per evitare questo, si può provare una delle due cose:

1. Nel onCreate () dei tuoi frammenti, chiamata setRetainInstance (true).

2 Se il numero di frammenti è fisso e relativamente piccolo, quindi nel vostro onCreate () aggiungere il seguente codice:.

ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(3);

Se non ricordo male, la seconda opzione è più promettente. Ma vi esorto a provare entrambi e vedere quale di loro lavoro.

"Imposta il numero di pagine che dovrebbero essere conservati su entrambi i lati della pagina corrente nella gerarchia della vista in uno stato di inattività. Pagine di là di questo limite verrà ricreato tramite l'adattatore quando richiesto".

http://developer.android .com / riferimento / android / supporto / v4 / view / ViewPager.html # setOffscreenPageLimit (int)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top