2012-11-19 8 views
10

J'utilise le projet "Tabs + Swipe" et j'ai du mal à supprimer un fragment.Tabs + ViewPager + FragmentStatePagerAdapter - Comment supprimer fragment?

étapes que je fais:

  1. onglet Supprimer la base de données
  2. onglet Supprimer de la source de données FragmentStatePagerAdapter
  3. onglet Supprimer du actionbar.
  4. Supprimer le fragment à l'aide de Support FragmentManager.

Le problème: Après la supprimer exécutée de, pour une raison quelconque, je peux encore faire défiler vers la droite et voir un fragment vide. Je ne peux pas le sélectionner, il rebondit juste en arrière. Il semble que le fragment ne soit pas retiré, mais change sa position par rapport à l'étiquette de gauche.

Mon Adaptateur:

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(); 
     } 
    } 

Ma méthode remove (appelée à l'intérieur du fragment):

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 
     } 

apprécie l'aide!

Répondre

4

vous pouvez trouver la réponse ici - Remove Fragment Page from ViewPager in Android

il semble que manquant dans votre code est écrasant de la méthode de l'adaptateur suivant:

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

explication pourquoi cette solution « bizarre » fonctionne, vous pouvez trouver dans la réponse à la question dans le lien que je vous ai fourni.

+0

en effet une solution étrange. Merci :) –

0
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(); 
     } 
    } 
Questions connexes