如何保存和恢复Webview状态?
问题描述:
当我使用备份&恢复Webview状态时,我收到此消息: x地址处的网页可能会暂时关闭或可能永久移动到新的Web地址。如何保存和恢复Webview状态?
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
webViewShowPoll.saveState(savedInstanceState);
}
@Override
public void onRestoreInstanceState(Bundle outState) {
super.onRestoreInstanceState(outState);
webViewShowPoll.restoreState(outState);
}
和AndroidManifest.xml中
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SET_DEBUG_APP"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<activity
android:name="com.omid.epoll.mobile.Poll"
android:launchMode="singleInstance"
android:label="@string/title_activity_poll"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
</activity>
答
if (isInternetPresent) {
// Internet Connection is Present
// make HTTP requests
// showAlertDialog(HomeScreen.this, "Internet Connection",
// "You have internet connection", true);
webviewbrowse.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
webviewAds.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
webviewbrowse.loadUrl("http://www.example.com");
} else {
// Internet connection is not present
// Ask user to connect to Internet
webviewbrowse.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webviewAds.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webviewbrowse.loadUrl("http://example.com");
showAlertDialog(HomeScreen.this, "internet doesn't connect",
" please connect to internet", false);
}
答
SAVE的WebView州
public class Tab2Fragment extends Fragment {
private WebView webView;
private Bundle webViewBundle;
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
LinearLayout ll = (LinearLayout) inflater.inflate(R.layout.tab2, container, false);
webView = (WebView) ll.findViewById(R.id.webView1);
webView.setWebViewClient(new WebViewClient());
if (webViewBundle == null) {
webView.loadUrl("http://www.lucazanini.eu");
} else {
webView.restoreState(webViewBundle);
}
return ll;
}
@Override public void onPause() {
super.onPause();
webViewBundle = new Bundle();
webView.saveState(webViewBundle);
}
}
答
restoreState从不可靠。这也许就是为什么文档现在说这个。
如果WebView中有机会建立国家 (载入网页,创建一个后退/前进列表等)有可能是 不良的副作用后,它被称为。请注意,此方法不再使用 还原此WebView的显示数据。从而
而对于saveState和()中的相应条目讲:
请注意,此方法不再存储的显示数据为 这个web视图。
你真的应该在onCreate方法里面做的是调用webView.loadUrl(),如果你想显示最近访问过的网址,请参阅本answer:
如果你关心的WebView重装对取向变化等
你可以设置你的活动来处理的方向和keyboardHidden变化,然后就离开了的WebView单独
答
如果您的WebView是一个片段,请检查以下内容:
节省:
@Override
public void onSaveInstanceState(Bundle outState) {
webView.saveState(outState); // output would be a WebBackForwardList
}
You may check the doc for saveState.
恢复:
@Override
public void onCreate(Bundle savedInstanceState) {
...
if (savedInstanceState != null) {
webView.saveState(savedInstanceState);
} else {
webView.loadUrl("http://mypage");
}
}
我做了以下内容:http://计算器的.com /一个/2413303分之27020832 – EpicPandaForce