Determinar cuándo un ViewPager cambia de página


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

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

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

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

}

Eclipse dice que @Override no es necesario y super no se puede configurar. Nunca es llamado por el sistema, e incluso si fuera cómo determinaría qué página se estaba mostrando en este momento? ¿Podría tener algo de ayuda aquí?

Author: Community, 2012-07-02

4 answers

Utilice el 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.
    }
});
 202
Author: Joru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-03 19:33:35

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

        }
    });
 108
Author: Jaydipsinh Zala,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-08 17:26:54

También puede usar ViewPager.SimpleOnPageChangeListener en lugar de ViewPager.OnPageChangeListener y anular solo los métodos que desee usar.

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

Espero que esto ayude:)

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

 34
Author: Hemant Sharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-01 04:45:52

Para Kotlin,

view_pager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {

            override fun onPageScrollStateChanged(state: Int) {
            }

            override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {

            }

            override fun onPageSelected(position: Int) {
            }
        })
 4
Author: KishanSolanki124,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-18 09:25:07