Одна из тех проблем, с которыми я недавно столкнулся, – использование FragmentContainerView. В прошлом проект был очень запутанным, и теперь цель — оптимизировать и улучшить его производительность. И это начинается здесь.
У меня есть один MainActivity для моего проекта. Это начальная активность. И тогда у меня будет еще один фрагмент, который будет добавлен в FragmentContainerView действия. И затем внутри этого первого дочернего фрагмента у меня будет макет вкладки, в который затем будет добавлен еще один дочерний фрагмент.
Это внутри основного действия:
Код: Выделить всё
Когда я пытаюсь добавить следующий фрагмент (запускаемый нажатием кнопки), происходит очень интересное что-то произошло (после неоднократных наблюдений):
- (режим отладки) Когда я запускаю приложение в режиме отладки, последующий дочерний фрагмент (фрагмент с дочернее представление) загрузится.
- (Нормальный режим) Когда я прекращаю отладку и запускаю приложение в обычном режиме «Выполнить», дочерний фрагмент больше не будет загружаться. У меня просто пустой экран. Я даже пытался создать функцию для вызова в конце загрузки фрагмента, связанного с вкладкой. FragmentContainerView покажет, что есть 2 дочерних элемента. И это правильно, поскольку теперь в контейнер добавлены фрагменты «Домой» и «Избранное».
Код: Выделить всё
private void switchFragmentView(Fragment pShowFragment, Fragment pHideFragment, Bundle args, String tag) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setReorderingAllowed(true);
if (pHideFragment != null) {
ft.hide(pHideFragment);
}
if (getSupportFragmentManager().findFragmentByTag(tag) == null) {
if (pShowFragment instanceof MxFavouritesFragment)
ft.add(R.id.mxb_fragment_container, MxFavouritesFragment.class, args, tag);
} else {
ft.show(pShowFragment);
}
ft.commit();
}
Код: Выделить всё
getChildFragmentManager()
.beginTransaction()
.replace(R.id.mxb_fav_main_container, RecentFavouritesFragment.class, null, RecentFavouritesFragment.LOG_TAG)
.commit();
Что я могу сделать, чтобы гарантировать, что пользовательские интерфейсы загружаются правильно и не появляется пустое окно? screen?
Я воспользовался некоторыми онлайн-советами по использованию функций validate() или requestLayout(), которые должны заставить контейнер перерисовываться. Но по какой-то причине он ничего не делает (насколько я могу судить).
Подробнее здесь: https://stackoverflow.com/questions/791 ... tainerview
Мобильная версия