Я реализую стандартный шаблон ящика навигации для Android, с примерно 10 фрагментами, которые пользователь может перейти с ящика. В настоящее время я создаю новый фрагмент каждый раз, когда другой элемент навигационного элемента кликается так:
// When a new navigation item at index is clicked
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
Fragment newFragment = null;
if (index == 0)
fragment = new Fragment0();
...
ft.replace(R.id.container, newFragment);
ft.commit();
Мне было интересно, было бы более эффективно делать что-то вроде следующего:
// Somewhere in onCreate
Fragment[] fragments = new Fragment[n];
fragments[0] = new Fragment0();
fragments[1] = new Fragment1();
...
// When a new navigation item (at index) is clicked
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.replace(R.id.container, fragments[index]);
ft.commit();
Мое основное беспокойство заключается в том, что некоторые фрагменты содержат значительный объем данных (довольно большие списки и множество просмотров). Будут ли какие-либо проблемы с хранением всех этих фрагментов в памяти и будут ли они давать какие-либо преимущества перед созданием новых фрагментов каждый раз (кроме более быстрых переключений между фрагментами)? Есть ли общепринятое "лучшее" решение?