android - 防止在 FragmentPagerAdapter 中重新加载 WebView?

标签 android android-fragments android-webview

我有一个 FragmentPagerAdapter 用于显示大约 6 个选项卡,所有这些选项卡都从 Web 服务器加载数据。其中一个选项卡包含一个从我的服务器加载图像的 WebView。 生成图像的服务器端成本很高,因此我想减少重新加载 WebView 的调用次数。对于非 WebView 选项卡,我已经能够保存我的状态(对于那些,只是一个简单的数组)并在选项卡被刷过时恢复它们。

问题:

  • 每次我使用 FragmentPagerAdapter 滑动回到 WebView 时,WebView 都会重新加载,导致重新加载时间长,网络服务器负载高。

考虑的解决方案:

  • 使用ViewPager.setOffscreenPageLimit() 这是有问题的,因为它会强制加载更多选项卡,即使它们永远不会被查看。这在我的服务器上不必要地昂贵。
  • 使用WebView.saveState()WebView.restoreState() 文档已更新,明确表示此处不再维护显示状态,因此这对这种情况不再有用。
  • 将我的 Activity 设置为:android:configChanges="keyboardHidden|orientation|screenSize" 这适用于旋转情况,但不会影响 ViewPager/FragmentPagerAdapter 滑动标签的情况。

这听起来像 WebView.saveState() 的旧行为会是完美的...

最佳答案

问题似乎是您正在清除自己的结果。

虽然在配置更改时需要新的 WebView,否则不需要新的 WebView。而且,如果您已经拥有 WebView,则无需告诉它执行任何操作。

所以,我会试试这个:

  • 在 fragment 的数据成员中保留您在 onCreateView() 中创建的 WebView
  • 仅当该数据成员为 null 时才在 onCreateView() 中扩充布局
  • 仅在扩充布局时调用 loadUrl()

(如果您在 Java 代码中创建 WebView,请将“inflate the layout”替换为“create the WebView via its constructor”)

如果 fragment 的内容超过 WebView,您还需要保留在数据成员中扩充的 Root View ,因此您可以从 onCreateView 返回它()

关于android - 防止在 FragmentPagerAdapter 中重新加载 WebView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14552377/

相关文章:

android - 如何通过 ListView 单击在 fragment 中显示项目详细信息

android - 如何让android webview保持在后台(使用位置)

android - Android 中的圆形按钮,不扩大尺寸

android - fragment 一直在我身上崩溃

javascript - 从android触发javascript事件

javascript - 非字符串变量可以进入 window.onerror 事件的处理程序吗?

带有 layer_type_software 的 Android WebView 不显示 HTML5 Canvas 内容

android - 在 Android 2.3 上实现 OBEX 推送服务器

android - onChildView 和 hasSiblings 与 Espresso

android - 在 fragment 中处理 onBackPressed