2012-10-08 15 views
15

Zajmuję się tworzeniem aplikacji z ViewPager dla bocznych przewijanych tabel, czasami potrzebuję zmienić adapter, aby załadować inny zestaw tabel. Próbowałem wykonać następujące czynności:Przystawka zmieniająca widoczność na Androidzie

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

ale zawsze przeładować poprzednie dane. Czy nie można zmienić adaptera ViewPagera?

Odpowiedz

2

Należy zastąpić public int getItemPosition (Object object) w adapterze pagera. Dla każdego elementu w przeglądarce podglądu musisz zwrócić POSITION_UNCHANGED (jeśli nadal jest w pagera) lub POSITION_NONE (jeśli został usunięty). W przeciwnym razie pager widoku nie będzie wiedział, że coś się zmieniło. Nie polecałbym ustawiania nowego adaptera, wystarczy wyczyścić dane w starym.

28

Dokładnie tak jak moja aplikacja robi ...

za zmiany ViewPagerAdapter, co zrobiłem to:

  1. Wyczyść wszystkie Fragmenty wewnątrz obecnego adaptera
  2. Ustaw prąd adapter null
  3. Przypisywanie nowy element zastępujący dla 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); 
    

Nadzieja pomaga ~

+3

Próbowałem Twojego rozwiązania. Działa idealnie bez żadnych problemów. bardzo dziękuję –

+0

W API 18 nie mogłem "setAdapter (null)". Jednak wszystko inne działało. Dzięki. – ffleandro

+0

działał idealnie! Tks !! – JannGabriel

-4

Dodaj to do wyświetlenia pager przeładować do następnego fragmentu:

viewPager.setCurrentItem() 
-1

znalazłem bardzo prostą opcję, nie wiem, czy to dobrze, czy źle, ale można tylko ponownie ustawić adapter

mViewPager.setAdapter(mSectionsPagerAdapter); 

To przykład dla przykładowego projektu google kartach aktywny dla przycisku FloatingActionButton

Powiązane problemy