Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Tabs + ViewPager + FragmentStatePagerAdapter – ¿Cómo eliminar el fragmento?

Estoy usando el proyecto "Tabs + Swipe" y estoy teniendo dificultades para eliminar un fragmento.

Pasos que estoy haciendo:

  1. Eliminar ficha de la base de datos
  2. Quitar ficha del origen de datos FragmentStatePagerAdapter
  3. Quite la pestaña de la barra de acción.
  4. Quite el fragmento utilizando Support FragmentManager.

El problema: después de realizar la eliminación, por alguna razón, todavía puede desplazarse a la derecha y ver un fragmento vacío. No puedo seleccionarlo, sólo rebote hacia atrás. Parece que el fragmento no está siendo eliminado, sino que cambia su posición a la etiqueta de la izquierda.

Mi adaptador:

public class SectionsPagerAdapter extends FragmentStatePagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { Fragment fragment = new TabFragment(); Bundle args = new Bundle(); args.putInt(TabFragment.ARG_TAB_POSITION, position); fragment.setArguments(args); return fragment; } @Override public int getCount() { return tabsList.size(); } @Override public CharSequence getPageTitle(int position) { return tabsList.get(position).getTitle(); } @Override public void destroyItem(ViewGroup container, int position, Object object) { super.destroyItem(container, position, object); FragmentManager manager = ((Fragment)object).getFragmentManager(); android.support.v4.app.FragmentTransaction trans = manager.beginTransaction(); trans.remove((Fragment)object); trans.commit(); } } 

Mi método de eliminación (llamado desde dentro del fragmento):

 public void removeTab() { mTabTableHandler.deleteTab(tab.getId()); //db tabsList.remove(tabPosition); //data source actionBar.removeTabAt(tabPosition); // actionbar getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit(); // support fragmentmanager tabsList = mTabTableHandler.query(); //requery db mSectionsPagerAdapter.notifyDataSetChanged(); //notify adapter } 

Apreciar la ayuda!

  • Separa la pila trasera de cada pestaña en Android mediante Fragmentos
  • NoSuchMethodError getChildFragmentManager ()
  • Android Datepicker Fragment - ¿Cómo hacer algo cuando el usuario establece una fecha?
  • SwipeRefreshLayout actualiza el conflicto con fragmentTransactions
  • Animación de fragmentos: diferencia entre setCustomAnimations y setTransitionStyle
  • Cómo borrar la pila trasera de fragmentos de Android sin reanudar fragmentos intermedios
  • Arriba Navegación (flecha de la barra de acción flecha) no funciona para fragmentos
  • División de texto a través de múltiples TextViews / Fragmentos con ViewPager
  • 2 Solutions collect form web for “Tabs + ViewPager + FragmentStatePagerAdapter – ¿Cómo eliminar el fragmento?”

    Puede encontrar la respuesta aquí – Eliminar la página de fragmentos de ViewPager en Android

    Parece que lo que falta en su código es sobrescribir el método del adaptador siguiente:

     @Override public int getItemPosition(Object object){ return PagerAdapter.POSITION_NONE; } 

    Explicación de por qué tan "extraña" solución funciona se puede encontrar en la respuesta a la pregunta en el enlace que le proporcioné.

     public void removeAllFragments(ViewGroup container) { /* * keep this line because section pager adapter has * the bug to not delete the last fragment completely * -> so we add an empty fragment */ int iStart = 0; addFragment(new Fragment()); Fragment frag; int size = fragments.size(); for (int iPos = iStart; iPos < size; iPos++) { frag = getItem(iStart); if (frag.isAdded()) { destroyItem(container, iStart, frag); } fragments.remove(frag); notifyDataSetChanged(); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.