2012-05-08 4 views
1

У меня возникли проблемы с пониманием того, как Android имеет дело с фрагментами (особенно вложенными фрагментами) при изменении ориентации.Вложенные фрагменты при изменении конфигурации (ориентации)

Скажите, что у меня есть активность a1, которая загружает фрагмент f1. f1 затем загружает несколько экземпляров фрагмента f2 в себя в методе oncreateview().

Сейчас моя деятельность a1 имеет это в (oncreate()):

if (savedInstanceState != null) 
    return; 

, чтобы убедиться, что несколько экземпляров из f1 не загружаются. Я делаю то же самое в f1, чтобы убедиться, что дубликаты f2 экземпляров не загружаются.

Однако мой класс f1 должен ссылаться на экземпляры f2 позже. В настоящее время я храню их в ArrayList в объекте f1, однако после изменения ориентации этот ArrayList пуст, и я думаю, что экземпляры f2 будут разными объектами.

Итак, мой вопрос в том, как наилучшим способом иметь вложенные фрагменты и сохранять ссылку на них после изменения ориентации?

ответ

1

Вы можете использовать FragmentManger, чтобы найти ссылки на другие фрагменты.

Вы можете получить ссылку на другой фрагмент, делая что-то вроде:

DetailsFragment details = (DetailsFragment) getFragmentManager().findFragmentById(R.id.details); 

или

DetailsFragment details = (DetailsFragment) getFragmentManager().findFragmentByTag("my tag"); 

Если вы еще не видели его взглянуть на this блоге.

В вашем случае, когда у вас есть несколько экземпляров одного и того же фрагмента, вы можете установить тег при создании фрагмента и использовать его вместо id при поиске фрагмента.