保存WebView的状态并重新加载位置

时间:2015-04-18 14:55:21

标签: java android webview savestate

我知道有很多关于此的问题,但它们似乎都已经老了,不再适用了 - 至少对我而言。我试图在用户退出或重新加载应用程序后保存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中所描述的那样有效了?我正在考虑一个数学解决方法,但目前这是关于我的专业知识,我必须了解更多(另外我不喜欢数学!)

感谢所有回复!

1 个答案:

答案 0 :(得分:6)

您可以使用getScrollY()获取网页浏览的垂直位置。将其保存在onSaveInstanceState

然后,使用scrollTo(x, y)恢复位置:

 yourWebview.scrollTo(0, savedYPosition);