この画像のような 2 つのフラグメントを持つアクティビティがあります。 ステータス A フラグメント B は ListFragment です。ユーザーがフラグメント B の 1 つの行をクリックすると、詳細が表示されます。UI は次のようになります: ステータス B
フラグメント B を移動してサイズを変更するにはどうすればよいですか?
私はこの方法を試しましたが、それが正しい方法なのかハッキーな方法なのかわかりません。このレイアウトをアクティビティに設定しました。
<LinearLayout
android:id="@+id/linearLayoutMainPart"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/scrollViewBottomMenu"
android:layout_toRightOf="@+id/scrollViewLeftMenu"
android:background="@android:color/white"
android:orientation="horizontal" >
<FrameLayout
android:id="@+id/leftContainer"
android:layout_width="wrap_content"
android:layout_height="match_parent" >
</FrameLayout>
<FrameLayout
android:id="@+id/rightContainer"
android:layout_width="0dip"
android:layout_height="match_parent">
</FrameLayout>
</LinearLayout>
3 つのフラグメント A、B、C クラスを作成します。アクティビティの作成時に、2 つのフラグメント A、B を leftContainer と rightContainer に追加します。(フラグメント A のレイアウト幅は固定です)。ユーザーがフラグメント B の 1 つの行をクリックすると、フラグメント A をフラグメント B の別のインスタンスに置き換えます (レイアウトが異なり、古いフラグメント B インスタンスと同じデータを使用します)。そして、rightContainer のフラグメント B をフラグメント C のインスタンスに置き換えます。
フラグメントBクラス。onCreateView メソッドが呼び出されたときにレイアウトを選択するフラグがあります。次のようなものです。
if(rightPosition)
return B_right_pos_layout;
else
return B_left_pos_layout;
フラグメント B の同じインスタンスを使用できると思います。次のようにすることで:
FragmentB fragmentB = (FragmentB) getSupportFragmentManager().findFragmentByTag(FRAGMENT_B_TAG);
fragmentB.setRightPos(false);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(rightContainer, fragmentC);
transaction.replace(leftContainer, fragmentB);
transaction.commit();
この方法はハックの方法に似ていると思います。最善の方法は何ですか?