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 .

  • Android ViewPager xml inflar error
  • Cómo lograr ViewPager (siguiente / anterior) en la aplicación de reproductor de música
  • Cómo cambiar la fuente de un pagertitlestrip
  • Menú como SKOUT y deslizamiento de una vista a otra mediante el toque en Android
  • Utilizar FragmentStatePagerAdapter sin biblioteca de soporte
  • Android: Debería agregar un constructor vacío a un fragmento utilizado en ViewPager
  • Adición dinámica y eliminación de pestañas en TabLayout (diseño de material) android
  • ¿Puede ViewPager tener varias vistas en cada página?
  • View Pager - ¿Cómo puedo colocar botones fijos encima de él
  • ¿Cómo puedo establecer TextColor, TextSize de PagerTitleStrip de código?
  • Errores de coincidencia de tar cuando agrega biblioteca en eclipse
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.