Итак, вот мой код. «currentFragment» - это просто поле, которое отслеживает отображаемое в данный момент. Это в классе, который сам является фрагментом (так что у меня есть фрагмент, показывающий фрагмент).Как предотвратить вызов функции onCreateView() фрагмента?
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), который содержит фрагмент, который я хочу добавить, и я не может просто добавить к нему четыре фрагмента, но скрыть три из них. Есть возможность добавить фрагмент без контейнера, но я не знаю, как это должно работать.
Итак, любые идеи?
Ugh, я не хочу использовать Bundles - они очень полезны, если я изменяю поля, не говоря уже о отсутствии проверки времени компиляции. Не обижайтесь на свой ответ - я уверен, что Android хочет, чтобы я это сделал.Знаете ли вы, что мой новый подход (см. Мой новый ответ) - хорошая идея? –