【问题标题】:Saving the state of a WebView and reloading the position保存 WebView 的状态并重新加载位置
【发布时间】:2015-04-18 14:55:20
【问题描述】:

我知道有很多关于此的问题,但它们似乎都已经过时并且不再工作了 - 至少对我来说是这样。我试图在用户退出或重新加载应用程序后保存 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),以前的行为可能会泄漏文件。”

链接 - 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 中描述的那样工作了吗?我正在考虑一种数学解决方法,但目前这超出了我的专业知识范围,我必须了解更多相关信息(而且我一般不喜欢数学!)

感谢所有回复!

【问题讨论】:

  • Webview 的位置是什么?和在浏览器上做 url#position 一样吗?
  • 用户在网页中阅读内容的深度。我希望在用户返回应用程序时保存并重新加载该位置。
  • 你可以修改 HTML/Javascript 端,还是只能在客户端/Webview 端修改?
  • 我对 JavaScript 没有经验,但我可以。 HTML 文件本地存储在 Assets 中。
  • 这可能不是最好的方法,但你可以覆盖 onTouchEvent 并跟踪移动并使用 webview 的滚动方法

标签: java android webview savestate


【解决方案1】:

您可以使用getScrollY() 来获取您的网页视图的垂直位置。保存在onSaveInstanceState

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

 yourWebview.scrollTo(0, savedYPosition);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    相关资源
    最近更新 更多