3

我有一个包含两个片段的活动,如下图所示: 状态 A 片段 B 是一个 ListFragment。当用户单击片段 B 中的一行时。我已显示详细信息。UI 应该是这样的: 状态 B

如何移动和调整片段 B 的大小?

我尝试过这种方式,但不知道这是正确的方式还是hacky方式。我为活动设置了这个布局。

<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 类。创建活动时,我将两个片段 A、B 添加到 leftContainer 和 rightContainer。(片段A的布局宽度是固定的)。当用户单击片段 B 中的一行时。我将片段 A 替换为片段 B 的另一个实例(具有不同的布局,并使用与旧片段 B 实例相同的数据)。并用片段 C 的实例替换 rightContainer 中的片段 B。

在片段 B 类中。调用 onCreateView 方法时,我有选择布局的标志,例如:

if(rightPosition) 
    return B_right_pos_layout;
else
    return B_left_pos_layout;

我想我可以使用 Fragment 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();

我认为这种方式更像是一种黑客方式。什么是最好的方法?

4

0 回答 0