android - 恢复带有 webview 的片段时,ViewPager 崩溃
问题描述
这是我的视图层次结构:
- 协调器布局
- 应用栏布局
- 浏览器
- 4个片段
第一个片段有 a WebView
(根是 a WebView
)。
当在页面之间快速移动时,我最终会得到这个错误(随机发生,或者在我无法弄清楚的某个位置)从具有WebView
或朝向它的片段滑开。
如果我在不包含 WebViews 的片段之间滑动,无论我滑动多快或滑动多少次,它都可以正常工作。
堆栈跟踪:
java.lang.IndexOutOfBoundsException: getChildDrawingOrder() returned invalid index 1 (child count is 1)
at android.view.ViewGroup.getAndVerifyPreorderedIndex(ViewGroup.java:2055)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4190)
at android.view.View.draw(View.java:21956)
at android.view.View.updateDisplayListIfDirty(View.java:20830)
at android.view.View.draw(View.java:21685)
at android.view.ViewGroup.drawChild(ViewGroup.java:4432)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4193)
at android.view.View.updateDisplayListIfDirty(View.java:20821)
at android.view.View.draw(View.java:21685)
at android.view.ViewGroup.drawChild(ViewGroup.java:4432)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4193)
at android.view.View.updateDisplayListIfDirty(View.java:20821)
at android.view.View.draw(View.java:21685)
at android.view.ViewGroup.drawChild(ViewGroup.java:4432)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4217)
at android.view.View.draw(View.java:21956)
at androidx.viewpager.widget.ViewPager.draw(ViewPager.java:2426)
at android.view.View.updateDisplayListIfDirty(View.java:20830)
at android.view.View.draw(View.java:21685)
at android.view.ViewGroup.drawChild(ViewGroup.java:4432)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4193)
at android.view.View.updateDisplayListIfDirty(View.java:20821)
at android.view.View.draw(View.java:21685)
at android.view.ViewGroup.drawChild(ViewGroup.java:4432)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4193)
at android.view.View.updateDisplayListIfDirty(View.java:20821)
at android.view.View.draw(View.java:21685)
at android.view.ViewGroup.drawChild(ViewGroup.java:4432)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4193)
at android.view.View.updateDisplayListIfDirty(View.java:20821)
at android.view.View.draw(View.java:21685)
at android.view.ViewGroup.drawChild(ViewGroup.java:4432)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4193)
at android.view.View.updateDisplayListIfDirty(View.java:20821)
at android.view.View.draw(View.java:21685)
at android.view.ViewGroup.drawChild(ViewGroup.java:4432)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4193)
at android.view.View.updateDisplayListIfDirty(View.java:20821)
at android.view.View.draw(View.java:21685)
at android.view.ViewGroup.drawChild(ViewGroup.java:4432)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4193)
at android.view.View.updateDisplayListIfDirty(View.java:20821)
at android.view.View.draw(View.java:21685)
at android.view.ViewGroup.drawChild(ViewGroup.java:4432)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4193)
at android.view.View.updateDisplayListIfDirty(View.java:20821)
at android.view.View.draw(View.java:21685)
at android.view.ViewGroup.drawChild(ViewGroup.java:4432)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4193)
at android.view.View.updateDisplayListIfDirty(View.java:20821)
at android.view.View.draw(View.java:21685)
at android.view.ViewGroup.drawChild(ViewGroup.java:4432)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4193)
at android.view.View.draw(View.java:21956)
at com.android.internal.policy.DecorView.draw(DecorView.java:795)
at android.view.View.updateDisplayListIfDirty(View.java:20830)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:575)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:581)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:654)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:3761)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3489)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2777)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1745)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7730)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966)
at android.view.Choreographer.doFrame(Choreographer.java:725)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:951)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7116)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:925)
解决方案
我很难理解为什么你IndexOutOfBoundException
没有看到你的代码的某些部分。但是,我可以假设,当加载Fragment
with时WebView
,它正在尝试使用一些尚不可用的资源。因此,我想提出一个解决方法。
您可以考虑设置 ,setOffscreenPageLimit
即使您一直向下滑动它也不会重新加载片段。示例代码如下。
ViewPager mViewpager = (ViewPager)findViewById(R.id.viewpager)
mViewPager.setOffscreenPageLimit(3);
我希望这能解决你的问题。
推荐阅读
- elasticsearch - 我正在尝试形成 Elasticsearch 查询。(SK=modelsku && DS=已批准)|| (DS=已批准 && RS = 已批准 && SK 以 sc 开头)以这种格式
- scalardl - Scalar DL 的资产记录如何避免 cosmosdb 的最大存储限制?
- sql - 为活动非活动输入数据填充 scd 类型 2 类型的日期
- python - 如何将 csv 文件的每一行转换为单独的文本文件?
- git - Visual Studio 2019 和 GIT - 更改分支后丢失引用
- multithreading - rust tui 应用程序中的并发 - 锁饥饿问题
- wordpress - 如何将在 wordpress.com 下开发的网站带到 hioxindia 托管帐户?
- python - 在 Python 中寻找高斯拟合的不确定性,减少卡方
- html - 最新的 Firefox 版本更改了网站布局
- c# - 调试 Nuget 包、dotnet Pack (.Net CLI) 与 Azure Pipeline Pack 任务