ViewPager of Fragment no muestra su contenido cuando el fragmento de raíz se reemplaza de nuevo

Estoy implementando la fragment screen que contiene root view pager que contiene child fragment y el primero de child fragment de child fragment tiene un view pager que muestra imágenes.

Se muestra bastante bien a primera vista, pero cuando el fragment que contiene el root view pager se elimina y se reemplaza de nuevo (con nueva palabra clave para la fragment screen ), el roow view pager no muestra child fragment .

Aquí está la porción de mi fuente.

  @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(); } } 

Tenga en cuenta que la fragment screen se disparó de la pila trasera cuando el usuario presiona botón de nuevo, y si se hace clic en el elemento de nuevo, la nueva instancia de la fragment screen is replaced de fragment screen is replaced lo que está mal con ellos?

En lugar de :

 HotelDetailPagerAdapter adapter = new HotelDetailPagerAdapter(getFragmentManager()); 

Tratar :

 HotelDetailPagerAdapter adapter = new HotelDetailPagerAdapter(getChildFragmentManager()); 

y

En lugar de :

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

Tratar :

 FragmentTransaction ft = getChildFragmentManager().beginTransaction(); 

El problema es que tiene fragmentos anidados y utiliza getFragmentManager (); Debe utilizar getChildFragmentManager () en su lugar.

Ver esta respuesta https://stackoverflow.com/a/13391359/1635488

He resuelto mi problema de mí mismo.

Fundamentalmente, no es un buen diseño utilizando fragmentos como una actividad. Incluso si se elimina la fragment screen y se destruye, los fragmentos de fragment screen de fragment screen de los niños no se destruyen.

En mi problema, los niños de la fragment screen primer fragment screen no fue destruido, por lo que mi adaptador de paginación reutiliza a los niños de nuevo. Esto provoca un comportamiento incorrecto del buscapersonas.

Hay varias soluciones para este problema.

Puede destruir todos los fragmentos de niños de la fragment screen de fragment screen cuando se destruye la fragment screen .

O simplemente cambia la fragment screen a Activity .

He aplicado el último método, funciona bien: D

Pasar un buen rato: D gracias por votar por mi pregunta.

  • Sincronizar todo el ListView en un ViewPager
  • Ver indicador de buscapersonas Jake Wharton
  • Deshabilitar animación suave al hacer clic en las pestañas con ViewPagerIndicator
  • Android: limitar los fragmentos de carga con una viewPager
  • ¿Por qué ViewPager y GridLayout con 30 elementos son muy lentos?
  • Cómo reemplazar Fragment dentro de ViewPager, usando PagerAdapter?
  • Java.lang.IllegalArgumentException: El observador es nulo
  • Fragmentos dentro de ViewPager no se destruyen
  • FragmentPagerAdapter Deslizar para mostrar ListView 1/3 Anchura de la pantalla
  • PagerSlidingTabStrip: Cómo actualizar fragmento interno Listview en la ficha actual en tiempo de ejecución y detener los datos de carga para la siguiente pestaña
  • Personalizar el relleno y el margen en IconPageIndicator
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.