私はそのようなレイアウトを持っています:
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 MyListFragment
XMLにハードコードすることは可能ですが、レイアウトの内容を他のフラグメントに置き換える必要があるため、これは私には合いません。