所以我在我的应用程序中使用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问题,但我觉得我做错了,因为他们不适合我。谢谢!!
答案 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;