Я использую приложение с меню навигации и хочу, чтобы все фрагменты создавались при запуске приложения, так как некоторые из фрагментов извлекают данные из веб-службы, и я не хочу, чтобы пользователю приходилось ждать все данные загружаются сразу же, как только они попадают на экран. Чтобы обойти это, я хочу создать все фрагменты сразу, а затем скрыть их, а затем отобразить правильный фрагмент.
private void initFragments() {
FragmentManager fManager = getFragmentManager();
FragmentTransaction fTransaction = fManager.beginTransaction();
for (int i = 0; i < MAIN_FRAGMENTS; i++) {
fTransaction.add(R.id.frame_container, fragmentArray[i], fragmentTags[i]);
}
fTransaction.commit();
fManager.executePendingTransactions();
}
private void hideFragments(){
FragmentManager fManager = getFragmentManager();
FragmentTransaction fTransaction = fManager.beginTransaction();
for (int i = 0; i < MAIN_FRAGMENTS; i++) {
fTransaction.hide(fManager.findFragmentByTag(fragmentTags[i]));
}
fTransaction.commit();
fManager.executePendingTransactions();
}
Мой способ обойти это состоял в том, чтобы просто создать все фрагменты, а затем скрыть их, вызвав
initFragments()
hideFragments()
Однако я заметил, что когда я запускаю это на эмуляторе, на некоторых устройствах он правильно отображает только один фрагмент, а остальные добавляются, но скрываются. Но на некоторых других устройствах он покажет все фрагменты, наложенные друг на друга, что приведет к уродливому беспорядку. Кроме того, когда я использую приложение на устройстве с горизонтальной ориентацией, таком как планшет, фрагменты также будут перекрывать друг друга, поскольку я перевел приложение только в портретный режим. Любые идеи о том, как лучше всего это сделать?