Chcę poznać bieżącą pozycję na stronie ViewPager
. Tworzę adapter i ustawiam ten adapter na ViewPager
. Teraz chcę poznać bieżący numer strony lub pozycję bieżącego widoku, ponieważ chcę rozpocząć dodatkowe zdarzenia na tej konkretnej stronie.
Użyłem viewPager.setCurrentItem(1);
do ustawienia pierwszej pozycji.
Czy istnieje podobny sposób uzyskiwania bieżącej strony?
android
android-viewpager
sam_k
źródło
źródło
setOnPageChangeListener()
jest przestarzały, użyjaddOnPageChangeListener()
zamiast niego.Istnieje metoda,
object_of_ViewPager.getCurrentItem()
która zwraca pozycję aktualnie oglądanej strony dla pagera widokuźródło
Jeśli chcesz tylko pozycję,
vp.getCurrentItem()
da ci ją, nie musisz stosować onPageChangeListener () tylko do tego celu.źródło
Dowiesz się, że setOnPageChangeListener jest przestarzały, użyj addOnPageChangeListener, jak poniżej:
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) { } });
źródło
W przypadku tego problemu odbiornik Onpagechange jest najlepszy Ale będzie miał również jeden mały błąd, że nie wykryje czasu rozpoczęcia dla pozycji zerowej Po zmianie strony zacznie wykrywać wybraną pozycję strony ... W tym celu problem znajduję najłatwiejsze rozwiązanie
1. Musisz zachować wybraną wartość pozycji, a następnie jej użyć ....
2. Przypadek 1: Na początku pozycji jest zawsze zero ....
Przypadek 2: Załóżmy, że jeśli ustawisz bieżącą pozycję, to ustawisz ją wartości do utrzymania pozycji 3, a
następnie wykonaj swoje działanie, wykorzystując to w swojej działalności ...
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(); } });
źródło
getCurrentItem()
, właściwie nie podaje właściwej pozycji dla pierwszej i ostatniej strony Poprawiłem to dodając ten kod: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; }
źródło
Nie ma żadnej metody getCurrentItem () w viewpager.i sprawdzonej już API
źródło
Możesz użyć OnPageChangeListener i uzyskać pozycję wewnątrz
onPageSelected()
metody, oto przykład: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) { } });
Lub po prostu użyj getCurrentItem (), aby uzyskać rzeczywistą pozycję:
viewPager.getCurrentItem();
źródło