2 つのタブを使用している場合は、タブごとに 2 つのフラグメントを個別に維持する必要があります。つまり、tab1 には FragmentA を、tab2 には FragmentB を、 FragmentA の xml には FragmentB に、FrgmentTransaction に FrameLayout が必要です。
FragmentA の xml、すなわち frag_a.xml :
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragmentA_container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
と
FragmentB の xml、すなわち frag_b.xml :
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragmentB_container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
Tab1 については、常に R.id.fragmentA_container を使用してトランザクションを実行します。つまり、最初のタブの最初のフラグメント (FragmentA) 内の別のフラグメントを置き換えます。以下のコードのように
FragmentA:
Fragment fragment = new YourFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
getSupportFragmentManager().popBackStack();
fragment.setArguments(null);
ft.replace(R.id.fragmentA_container, fragment);
ft.commit();
Tab2 では、常に R.id.fragmentB_container を使用してトランザクションを実行します。つまり、2 番目のタブの secondfragment(FragmentB) 内の別のフラグメントを置き換えます。以下のコードのように
FragmentB:
Fragment fragment = new YourFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
getSupportFragmentManager().popBackStack();
fragment.setArguments(null);
ft.replace(R.id.fragmentB_container, fragment);
ft.commit();