2012-07-02 14 views
79

Tengo tres páginas (Fragmentos) dentro de un ViewPager, sin embargo, solo quiero mostrar un elemento de menú para dos de esas páginas.Determinar cuándo un ViewPager cambia las páginas

El código dado en un previous SO answer no parece funcionar:

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

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

} 

Eclipse dice @ Override no es necesaria y super no se puede ajustar. El sistema nunca lo llama, e incluso si fuera así, ¿cómo iba a determinar qué página se mostraba en ese momento? ¿Podría tener algo de ayuda aquí?

+0

Ésta me funcionó, y le da un poco más de contexto sobre cómo usar la solución dada: [Detectar el cambio de la pestaña ViewPager dentro de Fragment] (http://stackoverflow.com/questions/9779397/detectar-viewpager-tab-change-inside-fragment). – gcl1

Respuesta

166

Uso del 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

Hay un error tipográfico en la línea 1: SetOnPageChangeListener debe establecerse en OnPageChangeListener. – Javide

+30

Puede utilizar SimpleOnPageChangeListener en su lugar y solo reemplazar onPageSelected – clocksmith

+0

Thanx para dar la respuesta correcta – Jigsh

101

ViewPager.setOnPageChangeListener ahora está en desuso. Ahora necesita usar ViewPager.addOnPageChangeListener en su lugar.

por ejemplo,

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

Parece que no entiendo. Soy un principiante absoluto. Entonces, ¿qué ponemos dentro de esos métodos? Por favor, ayúdame en dónde aprender 'addOnPageChangeListener'. –

+0

+1 para la información, pero ¿cuál es la diferencia de estos dos 'ViewPager.SimpleOnPageChangeListener' y' ViewPager.OnPageChangeListener' como lo mencionamos anteriormente? – RoCk

+2

@RoCk Con SimpleOnPageChangeListener solo tiene que anular los métodos que realmente desea usar. Ver http://stackoverflow.com/a/31961397/608312 por ejemplo. – JakeSteam

31

También se puede utilizar en lugar de ViewPager.SimpleOnPageChangeListenerViewPager.OnPageChangeListener y anular sólo aquellos métodos que desea utilizar.

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

Esperanza esta ayuda :)

Editar: Según API de Android, setOnPageChangeListener (ViewPager.OnPageChangeListener listener) está en desuso. Verifique esta url: - Android ViewPager API

+1

Como 'mViewPager.setOnPageChangeListener();' está en desuso ahora, este funciona bien. –

+0

En el código anterior, para detectar si un estado ha cambiado, guarde la posición actual y compárela cuando la página se desplaza en el método de la páginaScrolled. – AnupamChugh

Cuestiones relacionadas