Je souhaite connaître la position actuelle de la page ViewPager
. Je crée un adaptateur et définit cet adaptateur sur le ViewPager
. Maintenant, je veux connaître le numéro de page actuel ou la position de la vue actuelle, car je veux démarrer des événements supplémentaires sur cette page particulière.
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?
setOnPageChangeListener()
est obsolète, utilisez à laaddOnPageChangeListener()
place.Il existe une méthode
object_of_ViewPager.getCurrentItem()
qui renvoie la position de la page actuellement consultée du pager de vuela source
Si vous voulez seulement la position, vous la
vp.getCurrentItem()
donnera, pas besoin d'appliquer le onPageChangeListener () à cette seule fin.la source
Vous comprendrez 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) { } });
la source
Pour ce problème, Onpagechange listener est le meilleur Mais il aura aussi une petite erreur c'est qu'il ne détectera pas l'heure de début de la position 0.Une fois que vous changerez la page, il commencera à détecter la position de la page sélectionnée ... Pour cela problème je trouve la solution la plus simple
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 actuel, cela signifie valeur en position de maintien 3,
puis faites votre action avec l'utilisation de ce maintien 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(); } });
la source
getCurrentItem()
, ne donne pas réellement la bonne position pour la première et la dernière page que je l'ai corrigée 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; }
la source
Il n'y a aucune méthode getCurrentItem () dans viewpager.i qui a déjà vérifié l'API
la source
Vous pouvez utiliser OnPageChangeListener et obtenir la position à l'intérieur de la
onPageSelected()
méthode, 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();
la source