フラグメントをバックスタックにプッシュするメソッドを追加するか、アイテムをポップして、バックスタックに既にあるフラグメントを再利用できるようにする必要があります。次の関数の「名前」パラメーターは、検索してポップバックするための最良の方法を提供します (必要な場合)。
private void popToOrPushFragmentWithName(Fragment fragment, String name, FragmentTransaction ft) {
FragmentManager manager = getSupportFragmentManager();
// Scan the back stack for an entry with the given fragment name
int count = manager.getBackStackEntryCount();
FragmentManager.BackStackEntry entry = null;
while (--count >= 0) {
FragmentManager.BackStackEntry check = manager.getBackStackEntryAt(count);
if (check.getName() != null && check.getName().equals(name)) {
entry = check;
break;
}
}
if (entry == null) {
// There is no entry, so push the fragment
ft.replace(R.id.fragment_container, fragment);
ft.addToBackStack(name);
// might not need this next line (since you are using tabselected override)
ft.commit();
} else {
// Pop back to the existing fragment (0 = not inclusive, so our fragment by index is on top)
manager.popBackStackImmediate(entry.getId(), 0);
}
}
onTabselected は次のようになります。
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if(tab.getPosition()==0)
{
FragmentA frag = new FragmentA();
popToOrPushFragmentWithName(frag, "FragmentA", ft);
}
else
{
FragmentB frag = new FragmentB();
popToOrPushFragmentWithName(frag, "FragmentB", ft);
}
}
これが役立つことを願っています。:)