2012-10-08 17 views
15

Sto sviluppando un'applicazione con ViewPager per tabelle a scorrimento laterale, a volte ho bisogno di cambiare l'adattatore per caricare un diverso set di tabelle. Ho cercato di fare quanto segue:android viewpager cambia adattatore

mViewPager.setAdapter(new pagerAdapterPushed(getSupportFragmentManager())); 
mViewPager.getAdapter().notifyDataSetChanged(); 
indicator.setViewPager(mViewPager); 
indicator.invalidate(); 
mViewPager.invalidate(); 

ma ricaricare sempre i dati precedenti. Non è possibile cambiare l'adattatore di un ViewPager?

risposta

2

È necessario eseguire l'override di public int getItemPosition (Object object) nell'adattatore del cercapersone. Per ogni elemento nel viewpager, è necessario restituire POSITION_UNCHANGED (se è ancora nel cercapersone) o POSITION_NONE (se è stato rimosso). Altrimenti il ​​cercapersone non saprà che qualcosa è cambiato. Non consiglierei di impostare un nuovo adattatore, semplicemente cancellando i dati nel vecchio.

28

Esattamente come il mio APP fare ...

Per cambiare ViewPagerAdapter, quello che ho fatto è:

  1. Cancella tutti i frammenti all'interno dell'adattatore di corrente
  2. adattatore di corrente impostato su NULL
  3. Assegna nuovo adpatore per ViewPager

    /* Clear all Fragments inside current adapter */ 
    public class MyPagerAdapter extends FragmentPagerAdapter 
    { 
        private ArrayList<Fragment> fragments=new ArrayList<Fragment>(); 
        //...some stuff 
    
        public void clearAll() //Clear all page 
        { 
        for(int i=0; i<fragments.size(); i++) 
        fragMan.beginTransaction().remove(fragments.get(i)).commit(); 
        fragments.clear(); 
        } 
    } 
    
    /* Set current adapter to null */ 
    Constants.VP.removeAllViews(); 
    Constants.VP.setAdapter(null); 
    
    /* Assign new adpater for ViewPager */ 
    Constants.PAGER=new MyewPagerAdapter(getSupportFragmentManager()); 
    Constants.VP.setAdapter(Constants.PAGER); 
    

Speranza che aiuta ~

+3

Ho provato la soluzione. Funziona perfettamente senza problemi. grazie mille –

+0

In API 18 non potevo 'setAdapter (null)'. Comunque tutto il resto ha funzionato. Grazie. – ffleandro

+0

ha funzionato perfettamente !!! Tks !! – JannGabriel

-4

Aggiungere questo per visualizzare cercapersone per ricaricare per il prossimo frammento:

viewPager.setCurrentItem() 
-1

ho trovato molto semplice opzione, non so se è giusto o sbagliato, ma è possibile appena ri-impostare l'adattatore

mViewPager.setAdapter(mSectionsPagerAdapter); 

E 'ad esempio per esempio progetto di Google schede attività pulsante FloatingActionButton

Problemi correlati