如何在android中交换不同布局的片段?

时间:2012-08-02 23:23:40

标签: android android-fragments

我正在开发一个使用片段的Android应用程序,这些片段更像是Master / Detail形式。我希望主要活动由左侧的列表片段组成,基于左侧选择的项目,我想在右侧显示具有不同布局的片段。 (注意:右边的每个片段都需要不同的布局/视图)

我遇到的所有示例都通过更改其中的某些值或交换/替换具有相同布局的新片段,在右侧仅使用一个公共片段。

如果有人可以对这个问题有所了解,那么它将对我有很大的帮助。谢谢!

1 个答案:

答案 0 :(得分:9)

如果您使用framelayouts来保存片段,那么它与您提到的其他片段相同。您只需实例化您的片段(无论布局如何)并将其交换到framelayout而不是另一个。

如果您已经将片段硬编码到XML中,那么您将无法做到这一点(据我所能确定)。

<强> main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frames"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_above="@id/hline1"
    android:layout_below="@id/horizontalline"
    android:orientation="horizontal" >
    <FrameLayout
        android:id="@+id/leftpane"
        android:layout_width="0px"
        android:layout_height="match_parent"
        android:layout_weight=".4" />
    <TextView
        android:id="@+id/verticalline"
        android:layout_width="2dp"
        android:layout_height="match_parent"
        android:background="@color/bar_background"
        android:gravity="center_horizontal"
        android:paddingLeft="5dip"
        android:paddingRight="5dip" />
    <FrameLayout
        android:id="@+id/rightpane"
        android:layout_width="0px"
        android:layout_height="match_parent"
        android:layout_weight="1" >
    </FrameLayout>
</LinearLayout>

然后使用framelayout的id和实例化片段的名称将片段放入framelayout。

EventListFragment eventlist = new EventListFragment();
getFragmentManager().beginTransaction().replace(R.id.leftpane, eventlist).commit();

EventDetailFragment eventadd = new EventDetailFragment();
getFragmentManager().beginTransaction().replace(R.id.rightpane, eventadd).commit();

当您想要更改内容时,您再次执行相同的操作(以下内容将使用新的/不同的片段替换右窗格中的片段,该片段可以具有与之关联的不同布局:< / p>

EventSuperDetailFragment eventsuper = new EventSuperDetailFragment();
getFragmentManager().beginTransaction().replace(R.id.rightpane, eventsuper).commit();