だからここに私のコードがあります。「currentFragment」は、現在表示されているものを追跡する単純なフィールドです。これは、それ自体がフラグメントであるクラスにあります(したがって、フラグメントを示すフラグメントがあります)。
private void selectNavBarItem(NavbarItem v)
{
Fragment fragmentToUse = null;
if (v == setpointsNavItem)
{
fragmentToUse = setpointsFragment;
}
else if (v == rapidSetupNavItem)
{
fragmentToUse = rapidSetupFragment;
}
else if (v == outdoorResetNavItem)
{
fragmentToUse = outdoorResetFragment;
}
else if (v == rampDelayNavItem)
{
fragmentToUse = rampDelayFragment;
}
if (fragmentToUse != null)
{
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
if (currentFragment != null)
{
ft.detach(currentFragment);
}
currentFragment = fragmentToUse;
if (currentFragment.isDetached())
{
ft.attach(currentFragment);
}
else
{
ft.add(R.id.setup_content_holder, currentFragment);
}
ft.addToBackStack(null);
ft.commit();
}
すべてが素晴らしく見えますが、すべてのフラグメント (onCreateView() および onViewCreated()) のビューが再作成されています。取り付けと取り外しがうまくいくことを望んでいましたが、そうではありません。ビューを維持したい理由は、ユーザーが戻ったときにユーザーの選択が残っているためです。
別のオプションは表示と非表示ですが、このコードを所有するフラグメントには、追加したいフラグメントを保持する FrameLayout (R.id.setup_content_holder) があるため、それを機能させる方法がわかりません。それに 4 つのフラグメントを追加しますが、そのうちの 3 つを非表示にします。コンテナなしでフラグメントを追加するオプションがありますが、それがどのように機能するのかわかりません。
それで、何かアイデアはありますか?