2012-07-02 13 views
79

Mam trzy strony (Fragmenty) wewnątrz ViewPager, jednak chcę wyświetlić tylko element menu dla dwóch z tych stron.Określić, kiedy ViewPager zmienia strony

Kod podawany w previous SO answer nie wydają się działać:

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 

    if (isVisibleToUser == true) { } 
    else if (isVisibleToUser == false) { } 

} 

Eclipse mówi @Override nie jest potrzebna i super nie może być ustawiony. To nigdy nie jest wywoływane przez system, a nawet jeśli tak, to w jaki sposób mogę określić, która strona jest wyświetlana w tej chwili? Czy mogę tu uzyskać pomoc?

+0

Ten działał dla mnie i daje trochę więcej informacji o tym, jak używać danego rozwiązania: [Wykryj zmianę karty ViewPager wewnątrz Fragmentu] (http://stackoverflow.com/questions/9779397/detect-viewpager-tab-change-inside-fragment). – gcl1

Odpowiedz

166

Użyj ViewPager.onPageChangeListener:

viewPager.addOnPageChangeListener(new OnPageChangeListener() { 
    public void onPageScrollStateChanged(int state) {} 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} 

    public void onPageSelected(int position) { 
     // Check if this is the page you want. 
    } 
}); 
+1

W wierszu 1 występuje literówka: SetOnPageChangeListener powinno być ustawioneOnPageChangeListener. – Javide

+30

Zamiast tego można użyć SimpleOnPageChangeListener i tylko zastąpić onPageSelected – clocksmith

+0

Thanx za udzielenie poprawnej odpowiedzi – Jigsh

101

ViewPager.setOnPageChangeListener jest przestarzałe teraz. Teraz musisz użyć ViewPager.addOnPageChangeListener.

np

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 
+2

Wydaje mi się, że nie rozumiem. Jestem absolutnie początkującym. Więc co wkładamy w te metody? Proszę mi pomóc, gdzie się uczyć 'addOnPageChangeListener'. –

+0

+1 dla informacji, ale jaka jest różnica między tymi dwoma 'ViewPager.SimpleOnPageChangeListener' i' ViewPager.OnPageChangeListener', jak wspomniano powyżej? – RoCk

+2

@RoCk Z SimpleOnPageChangeListener wystarczy zastąpić metody, których faktycznie chcesz użyć. Zobacz na przykład http://stackoverflow.com/a/31961397/608312. – JakeSteam

31

Można również użyć ViewPager.SimpleOnPageChangeListener zamiast ViewPager.OnPageChangeListener i zastępują tylko te metody, których chcesz używać.

viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 

    // optional 
    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } 

    // optional 
    @Override 
    public void onPageSelected(int position) { } 

    // optional 
    @Override 
    public void onPageScrollStateChanged(int state) { } 
}); 

Nadzieja to pomaga :)

Edit: Zgodnie android API, setOnPageChangeListener (ViewPager.OnPageChangeListener listener) jest przestarzała. Sprawdź ten adres: - Android ViewPager API

+1

Ponieważ 'mViewPager.setOnPageChangeListener();' jest obecnie przestarzałe, ten działa dobrze. –

+0

W powyższym kodzie, aby wykryć, czy stan się zmienił, zapisz bieżącą pozycję i porównaj ją, gdy strona jest przewijana w metodzie onPageScrolled. – AnupamChugh

Powiązane problemy