自更新到支持库 23 后,collapseActionView 出现 IllegalStateException
IllegalStateException in collapseActionView since updating to Support library 23
我的布局是 AppBarLayout
,带有 Toolbar
和带有 3 个选项卡的 ViewPager
。
每个选项卡都支持通过 Toolbar
的 ActionMode
使用 SearchView
的搜索模式。
当我们更新我们的应用程序以使用新的 Support library 23.0.1
(目标 API 23,并使用构建工具 23.0.1)时,退出搜索模式会使应用程序在以下堆栈上崩溃:
FATAL EXCEPTION: main
Process: com.package.name, PID: 3021
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:3937)
at android.view.ViewGroup.addView(ViewGroup.java:3787)
at android.view.ViewGroup.addView(ViewGroup.java:3728)
at android.view.ViewGroup.addView(ViewGroup.java:3701)
at android.support.v7.widget.Toolbar.addChildrenForExpandedActionView(Toolbar.java:1809)
at android.support.v7.widget.Toolbar$ExpandedActionViewMenuPresenter.collapseItemActionView(Toolbar.java:2048)
at android.support.v7.internal.view.menu.MenuBuilder.collapseItemActionView(MenuBuilder.java:1345)
at android.support.v7.internal.view.menu.MenuItemImpl.collapseActionView(MenuItemImpl.java:705)
at android.support.v7.widget.Toolbar.collapseActionView(Toolbar.java:570)
at android.support.v7.widget.Toolbar.onClick(Toolbar.java:1065)
at android.view.View.performClick(View.java:4781)
at android.view.View$PerformClick.run(View.java:19873)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5289)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
恢复到 Support library 22.0.1
一切正常。
我看到我的 onMenuItemActionCollapse
回调被调用并返回 true,但它似乎在我的代码之外崩溃了。
问题是因为我们手动添加和删除工具栏中的 home 视图 - 看起来像在支持库 23 中,这个特殊按钮被放置在 [=14= 搜索视图 折叠时的隐藏视图 集合,我们对视图的更改与此逻辑冲突。
解决方案是改为切换 home 按钮可见性,这解决了崩溃问题
我的布局是 AppBarLayout
,带有 Toolbar
和带有 3 个选项卡的 ViewPager
。
每个选项卡都支持通过 Toolbar
的 ActionMode
使用 SearchView
的搜索模式。
当我们更新我们的应用程序以使用新的 Support library 23.0.1
(目标 API 23,并使用构建工具 23.0.1)时,退出搜索模式会使应用程序在以下堆栈上崩溃:
FATAL EXCEPTION: main
Process: com.package.name, PID: 3021
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:3937)
at android.view.ViewGroup.addView(ViewGroup.java:3787)
at android.view.ViewGroup.addView(ViewGroup.java:3728)
at android.view.ViewGroup.addView(ViewGroup.java:3701)
at android.support.v7.widget.Toolbar.addChildrenForExpandedActionView(Toolbar.java:1809)
at android.support.v7.widget.Toolbar$ExpandedActionViewMenuPresenter.collapseItemActionView(Toolbar.java:2048)
at android.support.v7.internal.view.menu.MenuBuilder.collapseItemActionView(MenuBuilder.java:1345)
at android.support.v7.internal.view.menu.MenuItemImpl.collapseActionView(MenuItemImpl.java:705)
at android.support.v7.widget.Toolbar.collapseActionView(Toolbar.java:570)
at android.support.v7.widget.Toolbar.onClick(Toolbar.java:1065)
at android.view.View.performClick(View.java:4781)
at android.view.View$PerformClick.run(View.java:19873)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5289)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
恢复到 Support library 22.0.1
一切正常。
我看到我的 onMenuItemActionCollapse
回调被调用并返回 true,但它似乎在我的代码之外崩溃了。
问题是因为我们手动添加和删除工具栏中的 home 视图 - 看起来像在支持库 23 中,这个特殊按钮被放置在 [=14= 搜索视图 折叠时的隐藏视图 集合,我们对视图的更改与此逻辑冲突。
解决方案是改为切换 home 按钮可见性,这解决了崩溃问题