Quitar dinámicamente un elemento de un ViewPager con FragmentStatePagerAdapter

Hay bastantes discusiones alrededor de este tema

  • ViewPager PagerAdapter no actualizar la vista
  • Actualizar ViewPager dinámicamente?
  • Eliminación de fragmentos de FragmentStatePagerAdapter

He intentado varias soluciones (incluyendo la invalidación con POSITION_NONE ). Pero todavía no sé cómo quitar un artículo correctamente.

Lo que ocurre es

  • O bien obtengo una página en blanco (lo que significa que el fragmento se destruye, pero el instantiateItem no fue llamado para un reemplazo)
  • O la cosa entera se bloquea probablemente porque la manera que el androide maneja las instancias del fragmento no coincide con cómo las guardo en mi arraylist/sparsearray

Aquí está mi adaptador

 private class DatePickerPagerAdapter extends FragmentStatePagerAdapter { ArrayList<Fragment> registeredFragments = new ArrayList<Fragment>(); public DatePickerPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return CreateWishFormDatePaginationFragment.newInstance(position); } @Override public int getItemPosition(Object object){ //doesnt change much.. return PagerAdapter.POSITION_NONE; } @Override public int getCount() { return iPageCount; } @Override public Object instantiateItem(ViewGroup container, int position) { Fragment fragment = (Fragment) super.instantiateItem(container, position); registeredFragments.add(position, fragment); return fragment; } @Override public void destroyItem(ViewGroup container, int position, Object object) { super.destroyItem(container, position, registeredFragments.get(position)); } public void removePage(ViewGroup pager, int position) { destroyItem(pager, position, null); registeredFragments.remove(position); iPageCount--; pagerIndicator.notifyDataSetChanged(); pagerAdapter.notifyDataSetChanged(); } public void addPage() { iPageCount++; pagerIndicator.notifyDataSetChanged(); pagerAdapter.notifyDataSetChanged(); } } 

Estoy utilizando un paginador de vista con ViewPagerIndicator y quiero ser capaz de eliminar una página entre, por ejemplo.

Por lo tanto sigue siendo la pregunta, ¿cuál es la manera correcta de manejar la adición y la eliminación de fragmentos en un ViewPager?

¡Gracias!

Si desea eliminar elementos de un ViewPager , este código siguiente probablemente no tenga sentido:

 @Override public Fragment getItem(int position) { return CreateWishFormDatePaginationFragment.newInstance(position); } 

Esencialmente, lo que el código anterior significa es que se crea un Fragment basado en la position . Por lo tanto, independientemente de la página que elimine, el rango de la posición cambiará de [0, iPageCount ) a [0, iPageCount-1 ) , lo que indica que siempre se deshará de la última.


Lo que usted necesita es más o menos lo siguiente:

 public class DatePickerPagerAdapter extends FragmentStatePagerAdapter { private ArrayList<Integer> page_indexes; public DatePickerPagerAdapter(FragmentManager fm) { super(fm); page_indexes = new ArrayList<>(); for (int i = 0; i < 10; i++) { page_indexes.add(new Integer(i)); } } @Override public int getCount() { return page_indexes.size(); } @Override public Fragment getItem(int position) { Integer index = page_indexes.get(position); return CreateWishFormDatePaginationFragment.newInstance(index.intValue()); } // This is called when notifyDataSetChanged() is called @Override public int getItemPosition(Object object) { // refresh all fragments when data set changed return PagerAdapter.POSITION_NONE; } // Delete a page at a `position` public void deletePage(int position) { // Remove the corresponding item in the data set page_indexes.remove(position); // Notify the adapter that the data set is changed notifyDataSetChanged(); } } 

Consulte este ejemplo completo para obtener más detalles acerca de cómo quitar el elemento de FragmentStatePagerAdapter .

  • ¿Cómo pasar argumentos de fragmentos mientras se utiliza un paginador de vista con diferentes fragmentos / layouts?
  • Iniciar animación cuando el fragmento es visible en ViewPager
  • Botón en ViewPager desplazarse a la página específica
  • Actualización de fragmentos / vistas en viewpager con fragmentStatePagerAdapter
  • Personalizar el relleno y el margen en IconPageIndicator
  • Guardar el estado de WebView y restaurar en ANDROID
  • Manejo del cambio de orientación con ViewPager + FragmentPagerAdapter
  • Deshabilitar ItemTouchHelper para una parte de un visor
  • ¿Por qué mi fragmento onCreate se llama extensivamente cada vez que una página a través de mis aplicaciones viewPager?
  • Fragmento en TabLayout sólo carga cuando el usuario desliza Android
  • Pestañas deslizantes dentro de las pestañas de la barra de acciones
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.