Java 如何防止重新加载Webview页面
我已经创建了一个应用程序,其中我有3个选项卡,可以使用fragment显示网页。每次我从选项卡1切换到选项卡2,然后再切换回选项卡1时,选项卡1都会重新加载。我已经搜索了谷歌和我发现不起作用的解决方案。到目前为止,我已经尝试过:Java 如何防止重新加载Webview页面,java,android,android-fragments,webview,android-studio,Java,Android,Android Fragments,Webview,Android Studio,我已经创建了一个应用程序,其中我有3个选项卡,可以使用fragment显示网页。每次我从选项卡1切换到选项卡2,然后再切换回选项卡1时,选项卡1都会重新加载。我已经搜索了谷歌和我发现不起作用的解决方案。到目前为止,我已经尝试过: @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mWebView.saveState(outState); } @Ove
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mWebView.saveState(outState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mWebView.restoreState(savedInstanceState);
}
这是:
<activity ...
android:launchMode="singleInstance"
android:alwaysRetainTaskState="true">
这是我的Webview片段之一:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
public class GamesFragment extends Fragment {
private ProgressBar progress;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_games, container, false);
String url = "http://myurl.com";
WebView myWebView = (WebView) rootView.findViewById(R.id.webViewGames);
myWebView.setWebChromeClient(new myWebViewClient());
myWebView.getSettings().setJavaScriptEnabled(true);
progress = (ProgressBar) rootView.findViewById(R.id.progressBar);
progress.setMax(100);
myWebView.loadUrl(url);
myWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView View, String url) {
View.loadUrl(url);
GamesFragment.this.progress.setProgress(0);
return true;
}
});
myWebView.setOnKeyListener(new android.view.View.OnKeyListener()
{
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
WebView webView = (WebView) v;
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (webView.canGoBack()) {
webView.goBack();
return true;
}
break;
}
}
return false;
}
});
return rootView;
}
private class myWebViewClient extends WebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
GamesFragment.this.setValue(newProgress);
super.onProgressChanged(view, newProgress);
}
}
public void setValue(int progress) {
this.progress.setProgress(progress);
}
}
一件有趣的事情是,每当我使用Tab1和Tab2时,它们中没有一个会重新加载,但当我切换到Tab3,然后返回到Tab1时,只有它会重新加载
任何帮助都将不胜感激 您是否可以尝试添加:
viewPager.setOffscreenPageLimit(2);
根据文件,setOffscreenPageLimit将:
设置应保留到页面两侧的页数
视图层次结构中处于空闲状态的当前页面。除此之外的页面
需要时,将从适配器重新创建限制
您应该将此限制保持在较低的水平,尤其是当您的页面具有复杂的>布局时。此设置默认为1
默认值为1,因此当您转到选项卡3时,当前选项卡左侧有两个选项卡,因此将重新创建选项卡1
viewPager.setOffscreenPageLimit(2);