【发布时间】:2021-06-14 15:54:16
【问题描述】:
我的应用程序发生随机崩溃,看起来它们是在 android 内部代码上。一种是:
java.lang.IllegalArgumentException: Only TabItem instances can be added to TabLayout
at com.google.android.material.tabs.TabLayout.addViewInternal(TabLayout.java:1606)
at com.google.android.material.tabs.TabLayout.addView(TabLayout.java:1589)
at android.transition.TransitionUtils.createViewBitmap(TransitionUtils.java:192)
at android.transition.TransitionUtils.copyViewImage(TransitionUtils.java:103)
和其他
java.lang.IllegalStateException: ViewPager2 does not support direct child views
at androidx.viewpager2.widget.ViewPager2.onViewAdded(ViewPager2.java:489)
at android.view.ViewGroup.dispatchViewAdded(ViewGroup.java:5937)
at android.view.ViewGroup.addViewInner(ViewGroup.java:6119)
at android.view.ViewGroup.addView(ViewGroup.java:5884)
at android.view.ViewGroup.addView(ViewGroup.java:5824)
at android.transition.TransitionUtils.createViewBitmap(TransitionUtils.java:192)
at android.transition.TransitionUtils.copyViewImage(TransitionUtils.java:103)
它们看起来都没有出现在我的代码中... 有没有人遇到过这些崩溃?
编辑:
堆栈跟踪的其余部分是常见的:
at android.transition.TransitionUtils.copyViewImage(TransitionUtils.java:103)
at android.transition.Visibility.onDisappear(Visibility.java:420)
at android.transition.Visibility.createAnimator(Visibility.java:255)
at android.transition.Transition.createAnimators(Transition.java:733)
at android.transition.TransitionSet.createAnimators(TransitionSet.java:444)
at android.transition.Transition.playTransition(Transition.java:1777)
at android.transition.TransitionManager$MultiListener.onPreDraw(TransitionManager.java:327)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1124)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3867)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2631)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9978)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1010)
at android.view.Choreographer.doCallbacks(Choreographer.java:809)
at android.view.Choreographer.doFrame(Choreographer.java:744)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:995)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8506)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
它发生在 android 10 而不是 android 7-9 上,看起来它正在尝试创建当前片段的位图,但当前片段包含 TabLayout 和 viewPager 并且不受支持。
调试我看到它试图在 TabLayout 上添加的无效视图是一个 SlidingTabIndicator,所以它看起来是正确的。
另一个信息,当我从 Theme.AppCompat.Light.NoActionBar 移动到 Theme.MaterialComponents.Light.NoActionBar 作为我的应用程序的基本主题时,看起来崩溃开始了
【问题讨论】:
-
看起来问题是在从片段退出之前它会在
tabLayout.visibility = View.GONE没有这个,它不会崩溃,但我有一个不美观的空标签布局 -
这显然是android代码库的一个bug
-
嘿@Perry 你解决问题了吗?
-
我做了一个解决方法:退出页面时,如果 tabLayout 消失了,则将其设置为可见
-
我也遇到了这个问题,并通过另一种解决方法解决了这个问题。你可以在这里查看 :) stackoverflow.com/a/68852671/2339405
标签: android navigation android-tablayout android-viewpager2