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

use*_*871 10 java android savestate webview

我知道有很多关于这个的问题,但它们似乎都已经老了,不再工作了 - 至少对我而言.我试图在用户退出或重新加载应用程序后保存webview的位置.我知道这段代码可以用来保存和加载Webview:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    myWebview.saveState(outState);
}
Run Code Online (Sandbox Code Playgroud)

并在onCreate:

if (savedInstanceState != null) {
    myWebview.restoreState(savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)

但是,在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));
}
Run Code Online (Sandbox Code Playgroud)

我的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);
}
Run Code Online (Sandbox Code Playgroud)

有没有人对这个问题有任何反馈,或者它只是不再像Android Developer WebView中描述的那样工作?我正在考虑一个数学解决方法,但目前这是关于我的专业知识,我必须了解更多(另外我不喜欢数学!)

感谢所有回复!

ToY*_*nos 6

您可以使用getScrollY()来获取webview的垂直位置.保存它onSaveInstanceState

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

 yourWebview.scrollTo(0, savedYPosition);
Run Code Online (Sandbox Code Playgroud)