ViewPager of Fragment не показывает свое содержимое, когда корневой фрагмент заменяется снова

Я реализую fragment screen , содержащий root view pager который содержит child fragment а первый из child fragment имеет view pager который показывает изображения.

Он показан очень хорошо в первый раз, но когда fragment содержащий root view pager удаляется и снова заменяется (с новым ключевым словом для fragment screen ), roow view pager не показывает child fragment .

Вот часть моего источника.

  @AfterViews // this is the method of fragment screen protected void afterViews() { api(HotelDetailAPI.class).getProduct("hotels", getArguments().getInt("itemId"), new Callback<Hotel>(this) { @Override public void success(Hotel _hotel, Response response) { hotel = _hotel; HotelDetailPagerAdapter adapter = new HotelDetailPagerAdapter(getFragmentManager()); contentViewPager.setAdapter(adapter); contentViewPager.setBackgroundColor(0xffffff); super.success(hotel, response); } @Override public void failure(RetrofitError error) { super.failure(error); LOG.error("failed"); } }); } private class HotelDetailPagerAdapter extends FragmentPagerAdapter { List<Fragment> fragments = new ArrayList<>(); public HotelDetailPagerAdapter(FragmentManager fm) { super(fm); Bundle data = new Bundle(); data.putSerializable("hotel", hotel); Fragment fragment1 = new HotelDetailReservationFragment_(); Fragment fragment2 = new HotelDetailReservationFragment_(); Fragment fragment3 = new HotelDetailReservationFragment_(); fragment1.setArguments(data); fragment2.setArguments(data); fragment3.setArguments(data); fragments.add(fragment1); fragments.add(fragment2); fragments.add(fragment3); } @Override public Fragment getItem(int position) { return fragments.get(position); } @Override public int getCount() { return 3; } } // this is the first fragment of root view pager it's not shown again. @EFragment(R.layout.fragment_hotel_detail_reservation) public class HotelDetailReservationFragment extends BaseFragment { private Hotel hotel; @AfterViews public void afterViews() { hotel = (Hotel)getArguments().getSerializable("hotel"); FragmentTransaction ft = getBaseActivity().getFragmentManager().beginTransaction(); Fragment fragment = new ImageSliderFragment_(); Bundle data = new Bundle(); data.putStringArray("images", hotel.getImages()); fragment.setArguments(data); ft.add(R.id.hotel_detail_image_slider_container, fragment); ft.commit(); } } 

Обратите внимание, что fragment screen выталкивается из заднего стека, когда пользователь нажимает кнопку «Назад», и если пользователь снова нажимает элемент, новый экземпляр fragment screen is replaced то, что с ними не так?

Solutions Collecting From Web of "ViewPager of Fragment не показывает свое содержимое, когда корневой фрагмент заменяется снова"

Вместо :

 HotelDetailPagerAdapter adapter = new HotelDetailPagerAdapter(getFragmentManager()); 

Пытаться :

 HotelDetailPagerAdapter adapter = new HotelDetailPagerAdapter(getChildFragmentManager()); 

а также

Вместо :

 FragmentTransaction ft = getBaseActivity().getFragmentManager().beginTransaction(); 

Пытаться :

 FragmentTransaction ft = getChildFragmentManager().beginTransaction(); 

Проблема в том, что у вас есть вложенные фрагменты и используйте getFragmentManager (); Вместо этого вы должны использовать getChildFragmentManager () .

См. Этот ответ https://stackoverflow.com/a/13391359/1635488

Я решил свою проблему от себя.

По сути, это не очень хороший дизайн с использованием фрагмента, подобного активности. Даже если fragment screen удален и уничтожен, фрагменты детского фрагмента не уничтожаются.

В моей проблеме дети первого fragment screen не были уничтожены, поэтому мой пейджер-адаптер снова использует детей. Это вызывает неправильное поведение пейджера представления.

Для решения этой проблемы существует различное решение.

Вы можете уничтожить все фрагменты fragment screen детей, когда fragment screen уничтожается.

Или просто измените fragment screen на Activity .

Я применил последний метод, он хорошо работает: D

Хорошо провести время: D спасибо за то, что голосовал по моему вопросу.