web-dev-qa-db-fra.com

Comment obtenez-vous le numéro de page actuel d'un ViewPager pour Android?

Je veux connaître la position actuelle de la page ViewPager. Je crée un adaptateur et le mets au ViewPager. Maintenant, je veux connaître le numéro de page ou la position actuelle de la vue actuelle, car je veux démarrer des événements supplémentaires sur cette page.

J'ai utilisé viewPager.setCurrentItem(1); pour régler le premier élément.

Existe-t-il une méthode similaire pour obtenir la page actuelle?

79
sam_k

dans les derniers packages, vous pouvez également utiliser

vp.getCurrentItem()

ou

vp est le viewPager,

pageListener = new PageListener();
vp.setOnPageChangeListener(pageListener);

vous devez mettre un écouteur de changement de page pour votre viewPager. Il n'y a pas de méthode sur viewPager pour obtenir la page actuelle.

private int currentPage;

    private static class PageListener extends SimpleOnPageChangeListener{
            public void onPageSelected(int position) {
                Log.i(TAG, "page selected " + position);
                   currentPage = position;
        }
    }
168
Yashwanth Kumar

Il existe une méthode object_of_ViewPager.getCurrentItem() qui renvoie la position de la page de visualisation actuellement visualisée.

46
Krishna Shrestha

Si vous ne voulez que la position, vp.getCurrentItem() vous la donnera, inutile d’appliquer onPageChangeListener () uniquement à cette fin.

15
devanshu_kaushik

Pour ce problème, l’écouteur Onpagechange est le meilleur. Mais il aura aussi une petite erreur: il ne détectera pas l’heure de début. Une fois que vous aurez changé de page, il commencera à détecter la position sélectionnée de la page ... Pour cela problème je trouve la solution la plus facile

1.Vous devez conserver la valeur de position sélectionnée puis l'utiliser ....
2. Cas 1: Au début de la position est toujours zéro ....
Cas 2: Supposons que si vous définissez l’élément en cours, vous définissez cette valeur en position de maintien
3.Alors faites votre action avec l'utilisation de cette maintenir dans votre activité ...

Public int maintain=0;
myViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i2) {
             //Toast.makeText(MyActivity.this, i+"  Is Selected  "+data.size(), Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onPageSelected( int i) {
          // here you will get the position of selected page
            maintain = i;


        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });


updateButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            Toast.makeText(MyActivity.this, i+"  Is Selected  "+data.size(), Toast.LENGTH_SHORT).show();
            data.set(maintain, "Replaced "+maintain);         
            myViewPager.getAdapter().notifyDataSetChanged();
        }
    });
7
Naveen Kumar

Vous découvrirez que setOnPageChangeListener est obsolète, utilisez addOnPageChangeListener, comme ci-dessous:

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

    }

    @Override
    public void onPageSelected(int position) {
       if(position == 1){  // if you want the second page, for example
           //Your code here
       }
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
});
7
Geraldo Neto

getCurrentItem() ne donne pas la bonne position pour la première et la dernière page que j'ai corrigées en ajoutant ce code:

public void CalcPostion() {    
    current = viewPager.getCurrentItem();

    if ((last == current) && (current != 1) && (current != 0)) {
        current = current + 1;
        viewPager.setCurrentItem(current);
    }
    if ((last == 1) && (current == 1)) {
        last = 0;
        current = 0;
    }
    display();
    last = current;
}
6
Da-monk

La méthode setOnPageChangeListener () est obsolète. Utilisez plutôt addOnPageChangeListener (OnPageChangeListener).

Vous pouvez utiliser OnPageChangeListener et obtenir la position dans la méthode onPageSelected(), voici un exemple:

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

        }

        @Override
        public void onPageSelected(int position) {
            Log.d(TAG, "my position is : " + position); 
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

Ou utilisez simplement getCurrentItem () pour obtenir la position réelle:

viewPager.getCurrentItem();
5
Jorgesys

Il n'y a pas de méthode getCurrentItem () dans viewpager.i déjà vérifié l'API

5
raman