2014-10-24 2 views
4

В моей MainActivity в OnCreate метод, который я добавить() MainFragment к FrameLayout main_view_container:Фрагменты внутри ViewPager не разрушались

 if (savedInstanceState == null) { 
     FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.add(R.id.main_view_container, new MainFragment(), MainFragment.FRAGMENT_TAG); 
     fragmentTransaction.commit(); 
    } 

В моей MainFragment я имею ViewPager с FragmentStatePagerAdapter и каждая страница сама Фрагмент (PagerFragment).

Затем в какой-то момент после нажатия кнопки я хочу заменить весь основной фрагмент другим фрагментом (заменяющим фрагментом) и добавить транзакцию в задний стек, чтобы я мог вернуться к нажатию кнопки MainFragment на задней панели. Поэтому я делаю следующее:

FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction(); 
       fragmentTransaction.replace(R.id.main_view_container, new ReplacementFragment(), null); 
       fragmentTransaction.addToBackStack(null); 
       fragmentTransaction.commit(); 

После того как я совершить сделку MainFragment останавливается и onDestroyView() вызывается, но совершенно ничего не происходит с PagerFragments (которые находятся в ViewPager в MainFragment) Не случае один OnStop() вызова. Затем, когда я возвращаюсь, представление MainFragment воссоздается в onCreateView(), что также означает новый экземпляр ViewPager, но все же ничего с PagerFragments.

Как возможно, что в родительском фрагменте onDestroyView вызывается, но не в дочерних фрагментах?

+0

Использовал getChildFragmentManager() при создании пейджера-адаптера внутри MainFragment? – cYrixmorten

+0

Почему вы не открываете новую активность вместо того, чтобы пытаться заменить весь свой основной файл другим? – Karakuri

+0

@cYrixmorten Нет Я этого не делал, я использовал FragmentManager Activity, и я думаю, поэтому детские фрагменты не управлялись. Это решает мое дело, спасибо! –

ответ

18

Вы должны использовать getChildFragmentManager() при создании адаптера пейджера внутри MainFragment.

+1

Реально ли он? Я использовал getChildFragmentManager() в MainFragment, но PagerFragments никогда не останавливаются. – abdfahim

Смежные вопросы