隐藏片段留空空间

时间:2013-10-22 09:08:49

标签: android android-fragments fragmenttransaction fragmentmanager

我有一个LinearLayout,它有3个容器(也是LinearLayouts),它们有weight=1。这是布局:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:baselineAligned="false"
    android:divider="?android:dividerHorizontal"
    android:orientation="horizontal"
    android:showDividers="middle" >

    <LinearLayout
        android:id="@+id/container1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="#FF0000"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/container2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="#00FF00"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/container3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical" >
    </LinearLayout>
</LinearLayout>

在每个容器中,我添加1个片段:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.container1, fragment1, TAG1);
transaction.add(R.id.container2, fragment2, TAG2);
transaction.add(R.id.container3, fragment3, TAG3);
transaction.commit();

所以现在他们的定位如下:

-------------------------------------
|           |           |           |
|           |           |           |
|           |           |           |
|           |           |           |
|           |           |           |
| fragment1 | fragment2 | fragment3 |
|           |           |           |
|           |           |           |
|           |           |           |
|           |           |           |
|           |           |           |
-------------------------------------

当我点击一个按钮时,我想首先隐藏它们与容器的碎片并显示fragment3右侧的新片段。所以我会有这样的事情:

-------------------------------------
|           |                       |
|           |                       |
|           |                       |
|           |                       |
|           |                       |
| fragment3 |       fragment4       |
|           |                       |
|           |                       |
|           |                       |
|           |                       |
|           |                       |
-------------------------------------

当我点击按钮时,我用它来隐藏片段:

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.hide(fragment1);
transaction.hide(fragment2);
transaction.addToBackStack(null);
transaction.commit();

它将碎片与其容器一起隐藏,但我得到的屏幕看起来像这样:

-------------------------------------
|           |           |           |
|           |           |           |
|           |           |           |
|           |           |           |
|           |           |           |
|   empty   |   empty   | fragment3 |
|           |           |           |
|           |           |           |
|           |           |           |
|           |           |           |
|           |           |           |
-------------------------------------

这里empty表示完全空,没有片段,没有容器,没有,只有那里的空白空间。

所以,我的问题是如何在不留空格的情况下隐藏片段?

2 个答案:

答案 0 :(得分:1)

我无法以这种方式工作,所以这是我的解决方案:

  • 而不是在我的布局中使用weight我使用了wrap_content
  • 当我添加我的片段时,我得到我的屏幕宽度并将每个片段容器的宽度设置为整个宽度的1/3。这样我就可以获得与weight=1相同的效果。
  • 我没有隐藏和显示片段,而是执行了以下操作:
    • 我将第4个片段添加到第3个右侧。
    • 我添加了水平滚动视图,因此用户可以向左和向右滚动并查看所有片段。

答案 1 :(得分:1)

要隐藏他们的容器,您可以使用

View mView = findViewById(R.id.container);
mView.setVisibility(View.GONE);  // Instead of View.INVISIBLE or View.VISIBLE

这会阻止您的容器占用任何空间,并且显然会隐藏该容器中的任何片段

fragmentTransaction.mFragment.hide.commit()

在你需要容器​​消失的情况下,我发现很大程度上没用。