保存 WebView 的状态并重新加载位置
Saving the state of a WebView and reloading the position
我知道有很多关于这个的问题,但它们似乎都过时了,不再工作了——至少对我来说是这样。我试图在用户退出或重新加载应用程序后保存 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
的信息:
"Saves the state of this WebView used in onSaveInstanceState(Bundle). Please note that this method no longer stores the display data for this WebView. The previous behavior could potentially leak files if restoreState(Bundle) was never called."
Link - 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 中所述那样工作了?我正在考虑一种数学解决方法,但目前这超出了我的专业知识,我必须了解更多相关知识(另外我一般不喜欢数学!)
感谢所有回复!
您可以使用 getScrollY() 获取您的网络视图的垂直位置。保存在 onSaveInstanceState
然后,用scrollTo(x, y)恢复位置:
yourWebview.scrollTo(0, savedYPosition);
我知道有很多关于这个的问题,但它们似乎都过时了,不再工作了——至少对我来说是这样。我试图在用户退出或重新加载应用程序后保存 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
的信息:
"Saves the state of this WebView used in onSaveInstanceState(Bundle). Please note that this method no longer stores the display data for this WebView. The previous behavior could potentially leak files if restoreState(Bundle) was never called."
Link - 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 中所述那样工作了?我正在考虑一种数学解决方法,但目前这超出了我的专业知识,我必须了解更多相关知识(另外我一般不喜欢数学!)
感谢所有回复!
您可以使用 getScrollY() 获取您的网络视图的垂直位置。保存在 onSaveInstanceState
然后,用scrollTo(x, y)恢复位置:
yourWebview.scrollTo(0, savedYPosition);