0

上部にいくつかのTextViewを含み、次に2つのフラグメントを左右に含むアクティビティを作成しようとしています。左側のフラグメントには、クリック可能なTextViewを備えたLinearLayoutが含まれています。これは、ユーザーが右側に表示されているフラグメントを判別できるようにするために使用されます。フラグメントを動的に切り替えることができるように、右側のフラグメントスペースを予約するにはどうすればよいですか?

私の現在の試みは次のようになります: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 に答える