我有一个 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/