我正在尝试创建一个 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();
}
我的猜测是您无法替换从布局加载的片段,因此我需要一种方法来节省布局中的空间并以编程方式加载片段。任何建议表示赞赏。