web-dev-qa-db-fra.com

Déterminer quand un ViewPager change de page

J'ai trois pages (fragments) dans un ViewPager, mais je souhaite uniquement afficher un élément de menu pour deux de ces pages.

Le code indiqué dans un réponse précédente SO ne semble pas fonctionner:

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

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

}

Eclipse indique que @Override n'est pas nécessaire et que super ne peut pas être défini. Le système n’appelle jamais, et même s’il s’agissait de savoir comment déterminer quelle page était affichée en ce moment? Pourrais-je avoir de l'aide ici?

125
Andrew Rabon

Utilisez le 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.
    }
});
252
Joru

ViewPager.setOnPageChangeListener est obsolète maintenant. Vous devez maintenant utiliser ViewPager.addOnPageChangeListener à la place.

par exemple,

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

        }
    });
115
Jaydipsinh Zala

Vous pouvez également utiliser ViewPager.SimpleOnPageChangeListener au lieu de ViewPager.OnPageChangeListener et remplacer uniquement les méthodes que vous souhaitez utiliser.

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

J'espère que cette aide :)

Modifier: Conformément aux API Android, _, setOnPageChangeListener (ViewPager.OnPageChangeListener listener) est obsolète. Veuillez vérifier cette URL: - Android ViewPager API

37
Hemant Sharma

Pour 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) {
            }
        })
9
KishanSolanki124