2012-11-19 17 views
10

Sto utilizzando il progetto "Tabs + Swipe" e ho difficoltà a rimuovere un frammento.Schede + ViewPager + FragmentStatePagerAdapter - Come rimuovere il frammento?

passaggi che sto facendo: scheda

  1. Rimuovere dal database
  2. scheda Rimuovere dalla sorgente di dati FragmentStatePagerAdapter
  3. scheda togliere dal ActionBar.
  4. Rimuovere il frammento utilizzando Support FragmentManager.

Il problema: Dopo effettuo la rimozione, per qualche motivo, può ancora scorrere verso destra e visualizzare un frammento vuoto. Non riesco a selezionarlo, semplicemente rimbalza. Sembra che il frammento non venga rimosso, ma piuttosto cambi la sua posizione rispetto al tag da sinistra.

mio adattatore:

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

Il mio metodo di rimozione (chiamato dall'interno del frammento):

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 
     } 

apprezzare l'aiuto!

risposta

4

è possibile trovare la risposta qui - Remove Fragment Page from ViewPager in Android

sembra ciò che manca nel codice sovrascrive del metodo di seguente adattatore:

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

spiegazione del perché tale soluzione "strano" funziona si possono trovare nella risposta alla domanda nel link che ti ho fornito.

+0

in effetti una soluzione bizzarra. Grazie :) –

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