在FragmentPagerAdapter中阻止WebView重新加载?

时间:2013-01-27 21:13:45

标签: android android-fragments android-webview

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

问题:

  • 每次使用FragmentPagerAdapter向我重新滑动时,WebView都会重新加载,导致我的网络服务器上的重新加载时间和负载都很高。

考虑的解决方案:

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

听起来WebView.saveState()的旧行为本来就很完美......

1 个答案:

答案 0 :(得分:12)

问题似乎在于你正在消灭自己的结果。

虽然您需要在配置更改时使用新的WebView,否则您不需要新的WebView。而且,如果您已经拥有WebView,则无需告诉它做任何事情。

所以,我试试这个:

  • 抓住您在WebView中在片段的数据成员中创建的onCreateView()
  • 如果该数据成员为onCreateView()
  • ,则仅在null中展开布局
  • 如果您夸大了布局,只能致电loadUrl()

(如果您在Java代码中创建WebView,请将“使布局膨胀”替换为“通过其构造函数创建WebView”。

如果片段的内容超过WebView,您还需要保留在数据成员中膨胀的根视图,这样您就可以从onCreateView()返回。 / p>