我知道有很多关于这个问题的提问,但它们似乎都已过时,无法再起作用 - 至少对我来说是这样。我正在尝试在用户退出或重新加载应用程序后保存webview的位置。我知道可以使用以下代码来保存和加载Webview:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
myWebview.saveState(outState);
}
在onCreate
中:
if (savedInstanceState != null) {
myWebview.restoreState(savedInstanceState);
}
但是,在Android开发者Webview页面中,关于saveState
的说明如下:
“保存在onSaveInstanceState(Bundle)中使用的此WebView的状态。请注意,该方法不再存储此WebView的显示数据。如果从未调用restoreState(Bundle),则以前的行为可能会泄漏文件。”
链接- https://developer.android.com/reference/android/webkit/WebView.html
如果我错了,这应该是可以工作的,那么可能是我的另一个函数的实现有问题,它保存了在WebView中显示的页面的下拉列表选择,并以非常类似上面所示的方式加载。也许同时使用两个函数不允许加载WebView的位置,只允许加载页面?这是我目前用来保存重新加载应用程序时WebView中加载的HTML页面的代码。
我的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开发者WebView中描述的那样工作了?我正在考虑一个数学解决方法,但目前这超出了我的专业知识范围,我需要学习更多相关知识(而且我总体上不喜欢数学!)。感谢所有回复!