0

私はそのようなレイアウトを持っています:

frame_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/items"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>

次に、FragmentActivityで次のことを行います。

setContentView(R.layout.fragment_layout);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
String tag = MyListFragment.class.getName();
MyListFragment fragment = (MyListFragment)
            getSupportFragmentManager().findFragmentByTag(tag);
 if (fragment == null) {
    fragment = new MyListFragment();
    ft.add(R.id.items, fragment, tag);
 }
 else {
    ft.replace(R.id.items, fragment, tag);
 }
 ft.addToBackStack(null);
 ft.commit();

このコードを一度呼び出すと、フラグメントが完全に表示されます。しかし、2回呼び出すと、コンテンツが表示されません。調査の結果、問題の原因は次のとおりです。

 setContentView(R.layout.fragment_layout);

たとえば、一度呼び出されると、フラグメントのコンテンツが完全に表示されます。しかしsetContentView、別のフラグメントを表示するには、何度も呼び出す必要があります。

どこが間違っているのですか?

PS MyListFragmentXMLにハードコードすることは可能ですが、レイアウトの内容を他のフラグメントに置き換える必要があるため、これは私には合いません。

4

1 に答える 1

0

誰も答えないので、私は別の解決策を見つけました。すべてのフレームのレイアウトを維持し、それらを表示/非表示にします。

それが私がそれをした方法です....メインレイアウト:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<FrameLayout
    android:id="@+id/container1"
    android:visibility="gone"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout>

<FrameLayout
    android:id="@+id/container2"
 android:visibility="gone"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout>

これが、フラグメントアクティビティでfragment2(container2に属する)を表示する方法です。

findViewById(R.id.container1).setVisibility(View.GONE);
findViewById(R.id.container2).setVisibility(View.VISIBLE);

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
String tag = MyFragment.class.getName();
Fragment fragment = (Fragment)getSupportFragmentManager().findFragmentByTag(tag);
if (fragment == null) {
   fragment = new MyFragment();
   ft.add(R.id.container2, fragment, tag);
}

ft.addToBackStack(null);
ft.commit();
于 2012-10-15T15:39:05.390 に答える