使用removeView()从AppBarLayout中删除TabLayout时出现故障

Big*_*dad 4 android android-appbarlayout android-tablayout

在recyclerview中单击某个项目时,我会调用它

appbar.removeView(tabs)

视频显示了会发生什么

它似乎完全删除TabLayout没有动画,然后将其添加回来,然后使用动画删除它.我放慢了转变速度,以显示它的作用.

当像这样添加它们时也会发生这种情况

if (tabs.parent != null) {
        (tabs.parent as ViewGroup).removeView(tabs)
    }
    appbar.addView(tabs)
    appbar.setExpanded(true, true)
Run Code Online (Sandbox Code Playgroud)

这是我的布局

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/coordinator_main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:animateLayoutChanges="true"
        app:elevation="0dp"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar">

        <android.support.v7.widget.Toolbar
            xmlns:android="http://schemas.android.com/apk/res/android"
            style="@style/MyToolbar"
            android:id="@+id/toolbar"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            app:layout_scrollFlags="scroll|enterAlways|snap"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabTextAppearance="@style/TabText"
            android:layout_marginRight="@dimen/small_spacing"
            android:layout_marginLeft="@dimen/small_spacing"
            app:tabMode="fixed"
            app:tabGravity="fill"
            app:tabIndicatorHeight="2dp"
            app:layout_scrollFlags="enterAlways"/>

    </android.support.design.widget.AppBarLayout>


    <FrameLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/appbar"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" >

        <***.***.CustomViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </FrameLayout>

</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

Ber*_*yle 5

从视频来看,看起来有三个片段根据其加载TabLayout. MyPhotosFragment,MyAlbumsFragmentMyFavouritesFragment.

如果我理解正确,您将被放置TabLayout在活动内部,并且这三个片段直接加载到活动中.在抽屉上选择"隐藏相册"时,会显示/添加应用栏,并在选择其他项目时隐藏/删除该应用栏.

你应该做的是制作一个充当容器的新片段.我们称之为HiddenAlbumsFragment.然后,你应该删除TabLayoutViewPager从活动,并把它里面的HiddenAlbumsFragment.单击选项卡项时,HiddenAlbumsFragment应将相应的片段加载为子片段.然后,当您从抽屉中选择一个时,将HiddenAlbumsFragment替换为另一个,则tablayout将自动消失.