WebView nachladen, wenn ViewPager Fragment in beibehalten die form BackStack
Hier ist ein code für eine grundlegende Fragment
enthält eine WebView
.
WebFragment.java
public class WebFragment extends Fragment {
String TAG = "WebFragment";
private WebView webView;
private String currentUrl = "http://www.google.com";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.webview_layout, null);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
webView = (WebView) getView().findViewById(R.id.helloWebview);
initWebView();
webView.loadUrl(currentUrl);
}
@SuppressLint("SetJavaScriptEnabled")
private void initWebView() {
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JavaScriptInterface(), "HTMLOUT");
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.e(TAG, "Loding...");
super.onPageStarted(view, url, favicon);
}
});
}
class JavaScriptInterface {
public void showHTML(String html) {
}
}
}
Habe ich 2 weitere basic-Fragmente(die keinen WebView
). Dann lege ich alle diese 3 Fragments
im ViewPager
(WebFragment
, Fragment1
und Fragment2
jeweils) mit FragmentAdapter
. Und ich fügte hinzu android:configChanges="orientation|screenSize"
im AndroidManifest.xml
(So WebView
wird nicht realod auf configration ändern).
Nun mein problem ist, Beim laufen-app ich habe die 1. Seite (WebFragmet) von ViewPager
2. Seite(Fragment1
) und wieder kam ich zurück zur 1. Seite. Also kein problem WebFragment
ist wie es ist.
Jetzt habe ich wieder geändert, das ViewPager
wie diese WebFragment
-->Fragment1
-->Fragment2
und kam zurück auf die 1. Seite durch Umkehrung der Richtung der oben genannten Maßnahmen. Aber damals sah ich das WebView
im WebFragment
Neuladen wird.
Und noch ein problem, wenn die WebView
Schritte einsetzen können, sehe ich 2 log-Eintrag, wie.
WebFragment Loading...
WebFragment Loading...
Also meine Frage ist :
1) Wie kann ich verhindern, dass WebView
nachladen, wenn der WebFragment
beibehalten von BackStack
?
2) Warum hier WebView
laden zweimal?
Sehe gerade diese Frage und die mir helfen(Verhindern WebView lädt in FragmentPagerAdapter?).
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrer Haupttätigkeit, wo Sie definiert haben, viewpager
nach der Erklärung der viewpager wie diese Zeile :
ViewPager viewpager = (ViewPager) findViewById(R.id.pager);
fügen Sie diese Zeile :
Dies wird verhindern, dass Ihr fragment von neu bis streichen von zwei Bildschirmen,so dass, wenn Sie zurück von 3. Seite zur 1. Seite in viewpager,Ihre webview wird nicht neu laden.
viewpager.setOffscreenPageLimit(2);
) aber Wenn ich 5 oder mehrFragments
in meinemViewPager
mitWebView
wenn ichviewpager.setOffscreenPageLimit(5+);
werden ,wird Es eine schlechte option, rigth? Was sagen Sie?initWebView()
so sollte es nicht zweimal rufen.viewpager.setOffscreenPageLimit(5+);
ist Speicher und performance. wenn ich 5+ als off-screen zu begrenzen. Alle 5+Fragments
wird es im Speicher, soAndroid
haben können performance-Problem in low-Spezifikation Gerät.Dies ist ein klassischer Fall von Opfer die easy-patch-Update des überwiegenden
android:configChanges
um ein problem zu lösen. Leider gibt es mehrere Gründe, warum Sie einen config-änderung Auftritt. So einfach zu fangen für eine Bildschirm Größe ändern, verpassen eine Menge von Ihnen...wie Sie entdeckt haben.Erste, vollständig zu entfernen
android:configChanges
. Dann fügen Sie den folgenden, um IhreWebView
fragment.Passen Sie Ihre WebView fragment
onActivityCreated
Methode die folgenden:}
Das sollte erhalten Sie gehen in die richtige Richtung. Hinweis: der Aufruf einer
WebView
's saveState() wird nicht speichern Sie die Daten anzeigen. Z.B. input-tags wird nicht perserve Benutzereingaben. Sie müssen analysieren, über die Website manuell zu bestehen, dass die Daten. Je nachdem, was Sie mit dem WebView für, das wird ein großer Schmerz.Sowie für Fragmente verwenden wie diese.