这个问题被多次询问,并且它有过常用的答案。最近在文档中说,他们出于安全原因删除了此功能。对于webView状态,只能恢复一些有限的内容。我尝试了多种方法,但每次刷新webView状态时都没有显示webView内容。
我想做什么?
我有一个网络应用,我希望在超时后检索用户内容(如果他们输入的凭据正确)。
到目前为止我做了什么?
1-我尝试了所有解决方案,包括以下方法:
@Override
protected void onSaveInstanceState(Bundle outState) {
webView.saveState(outState);
}
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.blah);
WebView webview = (WebView)findViewById(R.id.webview);
if (savedInstanceState != null)
webview.restoreState(savedInstanceState);
else
webview.loadUrl(URLData)
}
也是清单文件
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|uiMode|screenSize|smallestScreenSize"
2-我试图将我的超时活动显示为一个对话框,如果我在没有评估凭据的情况下解除它,但是如果我评估并关闭对话框则会重新创建webView。
任何帮助都将不胜感激。
答案 0 :(得分:1)
最后我找到了解决方案。无法保存WebView的状态并拥有所有内容,因此我们需要阻止重新加载或重新创建webView。为了让我们的活动的一个实例包含webView,我们应该将以下代码添加到我们的清单文件中:
<activity ...
android:launchMode="singleInstance"
android:alwaysRetainTaskState="true">
然后,如果通过您的应用程序,您需要完全重新创建实例以刷新webView,您可以使用finish();如果它在活动内部,或者如果您正在进行其他活动,并且想要重新创建webView活动,请阅读this link来执行此活动。
答案 1 :(得分:0)
如果纵向和横向视图的布局没有差异,请在清单中为“活动”设置android:configChanges="orientation|screenSize"
,以保留其中包含Webview的活动状态。
您可以将Webview状态另存为:
override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) webView.saveState(outState)
}
override fun onRestoreInstanceState(savedInstanceState: Bundle?) { super.onRestoreInstanceState(savedInstanceState) webView.restoreState(savedInstanceState)
}
仅在保存状态不为null时重新加载,例如:
if (savedInstanceState == null) {
webView.loadUrl("replace_with_your_url")
}