我知道有很多关于此的问题,但它们似乎都已经老了,不再适用了 - 至少对我而言。我试图在用户退出或重新加载应用程序后保存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),之前的行为可能会泄漏文件。”< / p>
链接 - 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中所描述的那样有效了?我正在考虑一个数学解决方法,但目前这是关于我的专业知识,我必须了解更多(另外我不喜欢数学!)
感谢所有回复!
答案 0 :(得分:6)
您可以使用getScrollY()获取网页浏览的垂直位置。将其保存在onSaveInstanceState
然后,使用scrollTo(x, y)恢复位置:
yourWebview.scrollTo(0, savedYPosition);