Ecco un codice per un Fragment
di base che contiene un WebView
.
WebFragment.java
WebView ricarica quando Frammento in ViewPager viene conservato in forma BackStack
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) {
}
}
}
Ho 2 frammenti più semplici anche (che non ha WebView
). Quindi ho inserito tutti questi 3 Fragments
in ViewPager
(WebFragment
, Fragment1
e Fragment2
rispettivamente) utilizzando FragmentAdapter
. E ho aggiunto android:configChanges="orientation|screenSize"
in AndroidManifest.xml
(Quindi WebView
non si realizzerà in caso di modifica della configrazione).
Ora il mio problema è, durante l'esecuzione dell'app ho cambiato la prima pagina (WebFragmet) di ViewPager
in 2a pagina (Fragment1
) e di nuovo sono tornato alla prima pagina. Quindi nessun problema WebFragment
è così com'è.
Ora ho cambiato nuovamente il ViewPager
come questo WebFragment
->Fragment1
->Fragment2
e sono tornato alla prima pagina invertendo la direzione dell'azione precedente. Ma in quel momento ho visto il WebView
nel WebFragment
si sta ricaricando.
E un altro problema, quando il WebView
ha iniziato il caricamento, posso vedere 2 voci di registro come.
WebFragment Loading...
WebFragment Loading...
Quindi la mia domanda è:
1) Come posso evitare WebView
ricaricamento quando il WebFragment
viene mantenuta da BackStack
?
2) Perché qui WebView
viene caricato due volte?
Basta vedere questa domanda e aiutarmi (Prevent WebView reloads in FragmentPagerAdapter?).
Abbastanza sicuro che questa sia la risposta giusta. – Wamasa
@Chirag Shah so davvero questo ('viewpager.setOffscreenPageLimit (2);') ma se ho 5 o più 'Fragments' nel mio' ViewPager' con 'WebView' se imposto' viewpager.setOffscreenPageLimit (5+); ', Sarà una cattiva opzione, vero? Cosa dici? –
Puoi rispondere per la mia seconda domanda? –