【发布时间】:2015-04-18 14:55:20
【问题描述】:
我知道有很多关于此的问题,但它们似乎都已经过时并且不再工作了 - 至少对我来说是这样。我试图在用户退出或重新加载应用程序后保存 webview 的位置。我知道这段代码可以用来保存和加载 Webview:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
myWebview.saveState(outState);
}
在onCreate:
if (savedInstanceState != null) {
myWebview.restoreState(savedInstanceState);
}
但是,在 Android Developer Webview 页面中,关于saveState 的内容如下:
“保存在 onSaveInstanceState(Bundle) 中使用的 WebView 的状态。请注意,此方法不再存储此 WebView 的显示数据。如果从不调用 restoreState(Bundle),以前的行为可能会泄漏文件。”
链接 - https://developer.android.com/reference/android/webkit/WebView.html
如果我错了并且这应该可以正常工作,那可能是我实现的另一个函数,它保存了 WebView 中显示的页面的微调器选择,并以与上面显示的非常相似的方式加载。也许使用两者都不允许加载 WebView 的位置并且只加载页面?当用户重新加载应用程序时,我目前需要保存将哪个 HTML 页面加载到 WebView 中。
我的onCreate:
if (savedInstanceState != null){
mySpinner.setSelection(prefs.getInt("spinnerSelection", 0));
}
我的onSaveInstanceState:
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getBaseContext());
SharedPreferences.Editor editor = getPrefs.edit();
values = Integer.parseInt(getPrefs.getString("pref_Sections", "1"));
switch (values) {
case 1:
int selectedPosition1 = mySpinner.getSelectedItemPosition();
editor.putInt("spinnerSelection1", selectedPosition1);
editor.commit();
break;
case 2:
int selectedPosition2 = mySpinner.getSelectedItemPosition();
editor.putInt("spinnerSelection2", selectedPosition2);
editor.commit();
break;
}
super.onSaveInstanceState(savedInstanceState);
}
是否有人对此问题有任何反馈,或者它只是不再像 Android Developer WebView 中描述的那样工作了吗?我正在考虑一种数学解决方法,但目前这超出了我的专业知识范围,我必须了解更多相关信息(而且我一般不喜欢数学!)
感谢所有回复!
【问题讨论】:
-
Webview 的位置是什么?和在浏览器上做 url#position 一样吗?
-
用户在网页中阅读内容的深度。我希望在用户返回应用程序时保存并重新加载该位置。
-
你可以修改 HTML/Javascript 端,还是只能在客户端/Webview 端修改?
-
我对 JavaScript 没有经验,但我可以。 HTML 文件本地存储在 Assets 中。
-
这可能不是最好的方法,但你可以覆盖 onTouchEvent 并跟踪移动并使用 webview 的滚动方法
标签: java android webview savestate