3

私は3つのコンテナ(LinearLayoutも)を持つLinearLayoutを持っていますが、これらには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は、完全に空、フラグメント、コンテナー、何もない、ただの空のスペースを意味します。

それで、私の質問は、そこに空白を残さずにフラグメントを非表示にする方法ですか?

4

2 に答える 2

2

私はそれをこのように機能させることができなかったので、ここに私の解決策があります:

  • 使用する代わりに、レイアウトでweight使用しました。wrap_content
  • フラグメントを追加すると、画面の幅を取得し、各フラグメント コンテナーの幅を全幅に設定し1/3ます。このようにして、 と同じ効果が得られweight=1ます。
  • フラグメントを非表示にして表示する代わりに、次のことを行いました。
    • 3 番目のフラグメントの右側に 4 番目のフラグメントを追加します。
    • ユーザーが左右にスクロールしてすべてのフラグメントを表示できるように、水平スクロール ビューを追加しました。
于 2013-11-28T12:41:17.340 に答える
1

コンテナを非表示にするには、使用できます

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

これにより、コンテナがスペースを占有するのを防ぎ、明らかにそのコンテナ内のフラグメントを非表示にします。

fragmentTransaction.mFragment.hide.commit()

コンテナも削除する必要がある場合、ほとんど役に立たないことがわかりました。

于 2015-10-17T07:01:56.780 に答える