从标签布局中的片段启动新片段不会隐藏标签

时间:2016-01-30 14:59:38

标签: android android-fragments android-viewpager android-tablayout

所以我在我的应用程序中使用ViewPager实现了Tab布局。每个选项卡显示一个片段。现在我想在选项卡布局中从这些片段之一打开一个新片段(让我们称之为B)(让我们称之为A)。所以A是标签布局,但我希望B占据整个屏幕。我甚至可以做到,但我面临的问题很少。新片段不占用整个屏幕。相反,它只是替换了以前的片段,看起来它是标签布局的一部分。

这是片段A的布局(我从中发布了新片段)。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/parent">

        <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:dividerHeight="0dp" />
    </FrameLayout>

</LinearLayout>

在片段A的类中,我使用这些行启动新片段,

Bundle bundle = new Bundle();
FragmentTransaction fragmentTransaction = getActivity()
           .getSupportFragmentManager()
           .beginTransaction();
Fragment fragmentB = new FragmentB();
fragmentB.setArguments(bundle);
fragmentTransaction.replace(R.id.parent, fragmentB);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

也是我的主要活动,这些片段附加到的活动使用viewPager实现tavLayout。

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:background="?attr/colorPrimary"
    android:elevation="6dp"
    android:minHeight="?attr/actionBarSize"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/toolbar"
    android:background="?attr/colorPrimary"
    android:elevation="6dp"
    android:minHeight="?attr/actionBarSize"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:layout_below="@id/tab_layout"/>

我最终看到一个新片段(片段B),但作为Tab布局的一部分,我想要隐藏标签布局。请帮助我,我经历了很多SO问题,但我觉得我做错了,因为他们不适合我。谢谢!!

2 个答案:

答案 0 :(得分:2)

我假设您已成功将FragA替换为FragB。

我的建议是 - &gt;将 TabLayout 放入 AppBarLayout ,将 AppBarLayout 的属性设置为android:animateLayoutChanges="true"

稍后以A-&gt; B替换您的片段时,使用setVisibility(View.GONE)以编程方式隐藏 TabLayout

答案 1 :(得分:1)

我认为更好的方法是从Activity中删除TabLayout和ViewPager并将它们放在顶级片段中。在这个顶级片段中,使用ChildFragmentManager来填充ViewPager。

&#xA;&#xA;

这种方式,只要您想从任何现有片段启动新片段(在您的情况下为B)然后你可以使用Activity的FrameLayout容器用一个全新的片段(B)替换包含Fragment(在你的情况下为A)的整个ViewPager和TabLayout。由于活动不包含ViewPager和Tablayout,因此它们不会在您的新片段中显示。

&#xA;&#xA;

看一下类似方法的答案 - https://stackoverflow.com/a/29315649/4440874

&#XA;&#XA;

活动结构应该是这样的 -

&#xA;&#xA;
 &lt; android.support.v7.widget.Toolbar&#xA;机器人:ID = “@ + ID /工具栏” &#XA;机器人:layout_width = “match_parent” &#XA;机器人:layout_height = “WRAP_CONTENT” &#XA;机器人:layout_alignParentTop = “真” &#XA;机器人:背景= “?ATTR / colorPrimary” &#XA;机器人:海拔= “6DP” &#XA;机器人:了minHeight = “?ATTR / actionBarSize” &#XA;机器人:主题= “@风格/ ThemeOverlay.AppCompat.Dark.ActionBar” &#XA; app:popupTheme =“@ style / ThemeOverlay.AppCompat.Light”/&gt;&#xA;&#xA;&lt; FrameLayout&#xA;机器人:ID = “@ + ID /容器” &#XA;机器人:layout_width = “match_parent” &#XA; android:layout_height =“wrap_content”/&gt;&#xA;  
&#xA;&#xA;

片段A布局 -

&#xA;&#xA; <预> <代码>&LT; android.support.design.widget.TabLayout&#XA;机器人:ID = “@ + ID / tab_layout” &#XA;机器人:layout_width = “match_parent” &#XA;机器人:layout_height = “WRAP_CONTENT” &#XA;机器人:layout_below = “@ + ID /工具栏” &#XA;机器人:背景= “?ATTR / colorPrimary” &#XA;机器人:海拔= “6DP” &#XA;机器人:了minHeight = “?ATTR / actionBarSize” &#XA;机器人:主题= “@风格/ ThemeOverlay.AppCompat.Dark.ActionBar”/&GT;&#XA;&#XA;&LT; android.support.v4.view.ViewPager&#XA;机器人:ID = “@ + ID /寻呼机” &#XA;机器人:layout_width = “match_parent” &#XA;机器人:layout_height = “FILL_PARENT” &#XA;机器人:layout_below = “@ ID / tab_layout”/&GT;&#XA; &#XA;