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
.
- ¿Es posible acceder al Fragmento actual que está siendo visualizado por un ViewPager?
- ViewPager + PagerAdapter muestra páginas en blanco después de los dos primeros elementos
- ViewPager omitir las vistas de devolución dejando en blanco
- ¿Cómo probar si una vista fragmentada es visible para el usuario?
- Navegación de nuevo a FragmentPagerAdapter -> fragmentos están vacíos
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?
- Android: ViewPager FragmentStatePagerAdapter obtener la vista actual
- Control preciso sobre las animaciones de Androids VectorDrawable
- Deslizar un elemento a la vez
- Mis fragmentos en la pestaña viewpager no se actualizan
- Refrescar vista de fragmentos mientras utiliza FragmentStatePagerAdapter
- Añadir títulos a ViewPager
- ListView dentro de un fragmento utilizado en un ViewPager no se comporta como se esperaba
- Android: ¿Cómo agregar iconos / drawables a la PagerTabStrip de la versión 4 de Android Support Lib?
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.