2012-09-04 20 views
6

Uso un ViewPager con molte WebViews, è per mostrare un ePub. Il mio problema è che le WebViews sono solo renderizzate/caricate (non sono abbastanza sicuro) se la loro pagina corrispondente diventa visibile. Dopodiché la pagina non ha bisogno di essere rieseguita fino a quando non viene distrutta da ViewPagerAdapter. La conseguenza è che c'è sempre una pagina bianca per un po '. Come posso pre-renderizzare la pagina che scorre alla successiva webView (che non è stata renderizzata prima).Le visualizzazioni Web in ViewPager non vengono caricate/rese finché non viene visualizzata la pagina

Questo è il mio PagerAdapter:

public class MagazineReaderPagerAdapter extends PagerAdapter { 

    private MagazineReaderActivity activity; 
    private EpubDocument epub; 

    public MagazineReaderPagerAdapter(Context ctx, EpubDocument epub) 
    { 
     activity = (MagazineReaderActivity) ctx; 
     this.epub = epub; 
    } 

    @Override 
     public int getCount() { 
     return epub.getContentDocuments().size(); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     ReaderWebViewMulti view = new ReaderWebViewMulti(activity); 
     view.loadContentDocument(epub.getContentDocuments().get(position), epub); 

     ((ViewPager) container).addView(view, 0); 
     return view; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view.equals(object); 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     ((ViewPager) container).removeView((View) object); 
    } 
} 

ReaderWebViewMulti si estende da ind WebView implementa un metodo di wich loadContentDocument carica il contenuto tramite loadDataWithBaseURL.

edit: Alla fase-OnCreate setOffscreenPageLimit è impostato su 3

viewPager.setOffscreenPageLimit(3); 

sottolineare quale sia il problema, ho fatto un po 'di video su YouTube

Dalla seconda 4 si può vedi che ogni pagina è appena renderizzata quando è già visibile. Quando torno tutto va bene.

+0

Qual è il 'offscreenPageLimit' per il' ViewPager' attualmente impostato su? – Devunwired

+0

è impostato su 3, ho aggiunto questo al testo – Mate

+2

Ho esattamente lo stesso problema ... Ho eseguito il debug e crea i frammenti fuori schermo, ma quando faccio scorrere la pagina, non viene visualizzato fino a quando la pagina non viene visualizzata Scorri: S –

risposta

0

Ho messo alcuni pensieri in questo. Scorrendo il pixel dello schermo 1 renderebbe giusta pagina:

class SomeClass implements OnPageChangeListener { 

     private ViewPager viewPager; 

     ... 

     viewPager = ... 
     viewPager.setOnPageChangeListener(this); 

     ... 

     @Override 
     public void onPageScrollStateChanged(int state) { 

      if (state == ViewPager.SCROLL_STATE_IDLE) { 
       // viewpager finished scrolling to a page 

       viewPager.scrollBy(1, 0); 
      } 
     } 
    } 

si avrebbe bisogno di controllare se si proviene da destra o da sinistra e in base a questo scorrimento da -1 o 1 pixel (la pagina in cui si sono provenienti da rimarrà in memoria, quindi non è necessario ricaricare quello). Solo alla prima scroll (dopo aver aperto l'app) il problema sopra descritto persisterà ancora.

Svantaggio: è possibile vedere la pagina che scorre di 1 pixel, se si guarda molto attentamente.

Qualcuno con più tempo di me potrebbe immergersi nel codice Android per vedere cosa succede esattamente quando 1 pixel entra nello schermo e imitare alcuni di questi comportamenti.

0

impostare questa proprietà per la vostra applicazione nel file manifesto

Android: hardwareAccelerated = "false"

Problemi correlati