2012-09-04 9 views
6

Uso ViewPager con muchas vistas web, es para mostrar un ePub. Mi problema es que las WebViews solo se procesan/cargan (no estoy del todo seguro) cuando se vuelve visible su página correspondiente. Después de esto, no es necesario volver a generar la página hasta que se destruya desde ViewPagerAdapter. La consecuencia es que siempre hay una página en blanco por un tiempo. ¿Cómo puedo predefinir la página que se desplaza sin problemas a la siguiente vista web (que no se procesó antes).WebViews en ViewPager no se cargan/renderizan hasta que se muestra la página

Esta es mi 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 se extiende desde ind WebView implementa un método wich loadContentDocument carga el contenido a través de loadDataWithBaseURL.

edición: En actividad alcrear la setOffscreenPageLimit se establece en 3

viewPager.setOffscreenPageLimit(3); 

señalar cuál es el problema, he hecho un pequeño vídeo en YouTube

partir de la segunda 4 puedas ver que cada página solo se muestra cuando ya está visible. Cuando regreso todo está bien.

+0

¿Cuál es el 'offscreenPageLimit' para el' ViewPager' actualmente configurado? – Devunwired

+0

se establece en 3, agregué esto al texto – Mate

+2

Tengo exactamente el mismo problema ... Depuré y crea los fragmentos fuera de la pantalla, pero cuando me desplazo por la página, simplemente no aparece hasta que la página está desplazado: S –

Respuesta

0

Puse algunos pensamientos en esto. Desplazamiento del pixel de la pantalla 1 haría que la página de la derecha:

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); 
      } 
     } 
    } 

que tendría que comprobar si se viene desde la derecha o la izquierda y de acuerdo con este desplazamiento por -1 o 1 píxeles (la página en la que está viniendo de permanecerá en la memoria, por lo que no necesita volver a cargarlo). Solo en el primer desplazamiento (después de abrir la aplicación) el problema descrito anteriormente aún persistirá.

Desventaja: puede ver la página desplazándose 1 píxel, si se ve de cerca.

Alguien con más tiempo que yo podría sumergirse en el código de Android para ver qué ocurre exactamente cuando 1 píxel entra en la pantalla, e imitar parte de este comportamiento.

0

conjunto esta propiedad para su aplicación en el archivo de manifiesto

androide: hardwareAccelerated = "false"

Cuestiones relacionadas