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!

One Solution collect form web for “Quitar dinámicamente un elemento de un ViewPager con FragmentStatePagerAdapter”

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 .

  • El título de ViewPager no aparece hasta que lo deslice
  • Viewpager no visible cuando tiene cualquier otro diseño como su hermano
  • Deshabilitar y habilitar la paginación en ViewPager en Android
  • Reordenar páginas en FragmentStatePagerAdapter usando getItemPosition (objeto objeto)
  • Tirar para actualizar y loadmore listview como facebook
  • ViewPager FragmentPagerAdapter Nullpointer
  • En ViewPager, al deslizar a la 3ª pestaña, el fragmento secundario en tab1 desaparece
  • Cómo lograr ViewPager (siguiente / anterior) en la aplicación de reproductor de música
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.