Search code examples
androidandroid-support-libraryandroid-6.0-marshmallowandroid-appbarlayout

IllegalStateException in collapseActionView since updating to Support library 23


I have a layout of AppBarLayout with a Toolbar and a ViewPager with 3 tabs. Each tab supports search-mode via Toolbar's ActionMode using a SearchView. When we update our app to use the new Support library 23.0.1 (targeting API 23, and using build tools 23.0.1) exiting the search mode crashes the app on the following stack:

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$3.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)

Reverting back to Support library 22.0.1 everything works fine. I'm seeing my onMenuItemActionCollapse callback called, and returning true, but then it seems to crash outside of my code.


Solution

  • The problem was caused since we were manually adding and removing the home view from the toolbar - looks like in Support library 23, this special button was placed in hidden views collection when the search view was collapsed and our changes to the view clashed with this logic.

    The solution was to toggle the home button visibility instead and this solved the crash