2012-10-08 16 views
15

Ich entwickle eine App mit einem ViewPager für seitliche Scroll-Tabellen, manchmal muss ich den Adapter ändern, um einen anderen Satz von Tabellen zu laden. Ich habe versucht, die folgendes zu tun: die vorherigen Datenandroid viewpager Adapter ändern

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

aber es ist immer wieder ein. Ist es nicht möglich den Adapter eines ViewPagers zu ändern?

Antwort

2

Sie müssen public int getItemPosition (Object object) im Pager-Adapter überschreiben. Für jedes Element im viewpager müssen Sie POSITION_UNCHANGED (wenn es sich noch im Pager befindet) oder POSITION_NONE (wenn es entfernt wurde) zurückgeben. Andernfalls weiß der Pager nicht, dass sich etwas geändert hat. Ich würde nicht empfehlen, einen neuen Adapter zu setzen, nur die Daten in der alten zu löschen.

28

Genau wie meine APP tun ...

Für Änderung ViewPagerAdapter, was ich getan habe ist:

  1. Löschen Sie alle Fragmente innerhalb Stromadapter
  2. Eingestellte Stromadapter auf null
  3. Assign neuer Adapter für 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); 
    

Hoffe, es hilft ~

+3

Ich habe Ihre Lösung versucht. Es funktioniert perfekt ohne irgendwelche Probleme. Vielen Dank –

+0

In API 18 konnte ich'Adapter (null) 'nicht setzen. Aber alles andere hat funktioniert. Vielen Dank. – ffleandro

+0

hat einfach perfekt funktioniert !!! Tks !! – JannGabriel

-4

diese hinzufügen Pager sehen für das nächste Fragment erneut zu laden:

viewPager.setCurrentItem() 
-1

Ich habe eine sehr einfache Möglichkeit gefunden, ich weiß nicht, ob es richtig oder falsch ist, aber man kann gerade neu setzen Sie den Adapter

mViewPager.setAdapter(mSectionsPagerAdapter); 

Es ist Beispiel für google Beispielprojekt Tabbed Aktivität für Taste FloatingActionButton