В моем проекте есть активность и несколько фрагментов. В настоящее время фрагменты объявлены в моей деятельности xml например:
<fragment
tools:layout="@layout/fragment_do_you_know"
android:name="myapp.fragments.DoYouKnowFragment"
android:id="@+id/doYouKnowFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible"/>
<fragment
tools:layout="@layout/fragment_whats_new"
android:name="myapp.fragments.WhatsNewFragment"
android:id="@+id/whatsNewFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible"/>
Во время инициализации активности я получаю ссылки на фрагменты:
mWhatsNewFragment = (WhatsNewFragment) mFragmentManager.findFragmentById(R.id.whatsNewFragment);
mDoYouKnowFragment = (DoYouKnowFragment) mFragmentManager.findFragmentById(R.id.doYouKnowFragment);
На разных действиях я показываю один из фрагментов и скрываю все остальные в транзакции FragmentManager:
protected void showFragment(BaseFragment fragment) {
FragmentTransaction transaction = mFragmentManager.beginTransaction();
transaction.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
BaseFragment visibleFragment = null;
for (BaseFragment fr: mAllFragments) {
if (fragment == fr) {
transaction.show(fr);
visibleFragment = fr;
}
else {
transaction.hide(fr);
}
}
transaction.commit();
if (visibleFragment != null) {
visibleFragment.onShow();
}
}
Я знаю, что другой подход заключается в использовании метода фабрики newInstance () для получения ссылок на фрагменты. В этом случае я предполагаю, что я должен установить параметры макета (layout_width, layout_height) по коду. Но я думаю, что это правильный путь, если я хочу передать параметры инициализации во фрагмент.
Поэтому мне интересно, какой подход лучше.
А также сохраняет ссылки на все фрагменты в порядке или лучше создать во время транзакции?