在FragmentPagerAdapter中阻止WebView重新加载?

Rea*_*lly 9 android android-webview android-fragments

我有一个FragmentPagerAdapter,用于显示大约6个选项卡,所有选项卡都从Web服务器加载数据.其中一个选项卡包含一个从我的服务器加载图像的WebView.生成映像的服务器端成本很高,因此我希望减少重新加载WebView的调用次数.对于非web视图选项卡,我已经能够拯救我的国家(对于那些,只是一个简单的数组),并恢复他们的标签得到刷卡通过.

问题:

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

考虑的解决方案:

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

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

Com*_*are 12

问题似乎是你正在消灭自己的结果.

虽然您需要更新WebView配置更改,但您不需要新的配置WebView.并且,如果您已经拥有WebView,则无需告诉它做任何事情.

所以,我试试这个:

  • 保留WebView您在onCreateView()片段的数据成员中创建的内容
  • onCreateView()如果该数据成员是,则仅扩展布局null
  • 只有loadUrl()在你给布局充气时才会打电话

(如果要创建WebViewJava代码,请将" WebView使用其构造函数创建"替换"使布局膨胀")

如果片段的内容是不是更WebView,则还需要将不放根视图您膨胀在一个数据成员,所以可以返回从onCreateView().

  • @DerekJohnson:将`getParent()`返回的`ViewParent`转换为`ViewGroup`并调用合适的remove方法. (2认同)