所以这是我的代码。'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) 包含我要添加的片段,我不能只是向其中添加四个片段,但隐藏其中三个。可以选择添加没有容器的片段,但我不知道它应该如何工作。
那么,有什么想法吗?