Ответ 1
У меня была аналогичная проблема. Я сделал подход, похожий на ваш, и чтобы сохранить нагрузку на процессор, я сделал следующее изменение для каждого вызова, чтобы создать экземпляр для объекта Fragment: (в контексте моего использования в методе selectItem)
switch (position) {
case 0:
if (fragmentOne == null)
fragmentOne = new FragmentOne();
getSupportFragmentManager().beginTransaction().......
break;
case 1:
if (fragmentTwo == null)
fragmentTwo = new FragmentTwo();
getSupportFragmentManager()......
FragmentOne и FragmentTwo - это два разных класса фрагментов, а фрагмент - один и фрагмент - это их объекты, объявленные как поля в MainActivity
Edit
Я хотел бы добавить, как вы могли бы следовать аналогичному подходу с массивом, содержащим фрагменты. Вместо того, чтобы создавать новые фрагменты в onCreate, делайте это при нажатии элемента. В onCreate отправьте вызов в ящик, чтобы выбрать фрагмент, который вы хотите выбрать по умолчанию при запуске.
//somewhere in onCreate
if (savedInstanceState == null) {
selectItem(defaultFragment);
}
else
selectItem(selectedFragment);
//selectItem is method called by DrawerItemClickListener as well
//in selectItem: when navigation item at index is clicked, the listener calls this
switch (index) {
case 0:
if (fragments == null) {
fragments = new Fragment[n];
fragment[0] = new Fragment0();
}
else if (fragments[0] == null) {
fragments[0] = new Fragment0();
}
break;
....
}
FragmentTransaction ft = fragmentManager.beginTransaction();
...
ft.replace(R.id.container, fragments[index]);
ft.commit();
Не нужно создавать экземпляры на onCreate, поскольку это замедляет запуск. Создавайте их по мере необходимости и затем используйте их, если они существуют. Новые фрагменты создаются только в том случае, если они загружаются в первый раз.