WebViews in ViewPager werden nicht geladen oder gerendert, bis die Seite angezeigt wird

Ich benutze einen ViewPager mit vielen WebViews, es ist für die Anzeige eines ePub. Mein Problem ist, dass die WebViews nur gerendert / geladen sind (im nicht ganz sicher), wenn ihre entsprechende Seite sichtbar wird. Danach muss die Seite nicht neu gerendert werden, bis sie aus dem ViewPagerAdapter zerstört wird. Die Folge ist, dass es immer eine weiße Seite für eine kleine Weile gibt. Wie kann ich die Seite vorab rendern, dass sie glatt zum nächsten WebView blättert (was vorher nicht gerendert wurde).

Das ist mein 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 erweitert von WebView ind implementiert eine Methode loadContentDocument, die den Inhalt über loadDataWithBaseURL lädt.

Edit: Bei der Aktivierung-oncreate ist das setOffscreenPageLimit auf 3 gesetzt

  viewPager.setOffscreenPageLimit(3); 

Um darauf hinzuweisen, was das Problem ist, habe ich ein kleines Video auf YouTube gemacht

Von der zweiten 4 können Sie sehen, dass jede Seite gerade gerendert wird, wenn sie bereits sichtbar ist. Wenn ich zurückkomme, ist alles in Ordnung.

  • Wie kann ich Kopieren und Einfügen aus einer ionischen Webansicht?
  • Javascript Callback-Funktion übergeben auf Android
  • JavascriptInterface auf Android funktioniert nicht mit APK im Freigabemodus
  • Hat WebView saveState () Javascript-Variablen / Umgebung beibehalten?
  • ShouldOverrideUrlLoading in WebView für Android läuft nicht
  • Android-Webview-URL-Anfrage mit Abfrage-String
  • Android - Webview nur die Verwendung von Headern auf die erste Anfrage
  • Web View Display "Android WebCore wird in diesem Fall nicht unterstützt" Warnung
  • 3 Solutions collect form web for “WebViews in ViewPager werden nicht geladen oder gerendert, bis die Seite angezeigt wird”

    Ich hatte das gleiche Problem und behielt es durch die Deaktivierung der Hardwarebeschleunigung für die Webansicht:

     webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

    Siehe WebView in ViewPager oder ScrollView – weird Rendering Bug auf Android 3.0+

    Ich habe ein paar Gedanken dazu gemacht. Das Scrollen des Bildschirms 1 Pixel würde die richtige Seite machen:

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

    Sie müssten überprüfen, ob Sie von rechts oder links kommen und entsprechend dieser Schriftrolle um -1 oder 1 Pixel (die Seite, aus der Sie kommen, wird im Speicher bleiben, also müssen Sie das nicht neu laden). Erst bei der ersten Scroll (nach dem Öffnen der App) bleibt das oben beschriebene Problem weiterhin bestehen.

    Nachteil: Sie können die Seite sehen, die 1 Pixel scrollt, wenn Sie genau hinschauen.

    Jemand mit mehr Zeit als ich könnte in den Android-Code tauchen, um zu sehen, was genau passiert, wenn 1 Pixel auf den Bildschirm kommt, und imitieren einige dieser Verhaltensweisen.

    Setze diese Eigenschaft für deine Anwendung in Manifestdatei

    Android: hardwareAccelerated = "false"

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.