0

我正在尝试创建一个 Activity,它在顶部包含一些 TextView,然后在下面并排放置两个 Fragment。左边的 Fragment 包含一个带有可点击 TextViews 的 LinearLayout,用于允许用户确定哪个 Fragment 显示在右边。如何保留右侧的 Fragment 空间,以便动态切换 Fragment?

我当前的尝试如下所示:main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/MainLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<!-- TextViews go here -->

<fragment
    android:id="@+id/fragmentSelector"
    android:name="com.metastable.android.pe.FragmentSelector"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignRight="@+id/empireNameTV"
    android:layout_below="@+id/empireNameTV" />


<fragment
    android:id="@+id/fragmentScreen"
    android:name="com.metastable.android.pe.FragmentSummary"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignTop="@+id/fragmentSelector"
    android:layout_toRightOf="@+id/fragmentSelector" />

</RelativeLayout>

此刻的 fragmentSelector 将始终存在,因此在创建活动时加载它很好,问题出在我的 fragmentScreen 上。就目前而言,它将加载看起来不错的 FragmentSummary,但是当我尝试替换它时,它的布局仍然在背景中,新的 Fragment 放在它上面。这是我进行替换的方法:

public void onScreenSelected(int screen) {
    Log.d("PE", "ScreenSelected called!");
    if (screen == currentScreen)
        return;

    FragmentTransaction ft =  fm.beginTransaction();
    switch (screen) {
    case SUMMARY:
        ft.replace(R.id.fragmentScreen, fragmentSummary);
        currentScreen = SUMMARY;
        break;
    case PLANET_MANAGER:
        ft.replace(R.id.fragmentScreen, fragmentPlanetManager);
        currentScreen = PLANET_MANAGER;
        break;
    }
    ft.commit();
}

我的猜测是您无法替换从布局加载的片段,因此我需要一种方法来节省布局中的空间并以编程方式加载片段。任何建议表示赞赏。

4

2 回答 2

1

在我看来,一个解决方法是让不需要的片段不可见。如下图,

<LinearLayout>

    <FrameLyout>

        //fragment 1 here

    </FrameLyout>

    <FrameLyout>

        //fragment 2 here

    </FrameLyout>

</LinearLayout>

现在,您可以通过使其父框架布局不可见或消失来隐藏片段。

我希望这能解决你的问题..

于 2012-04-20T05:23:59.513 回答
0

只需将布局添加到您的 xml 以充当片段的容器。

<LinearLayout ...>
    <!-- Dynamic fragments go here -->
</LinearLayout>
于 2012-04-20T05:00:56.247 回答