Я хочу знать текущую позицию файла ViewPager
. Я создаю адаптер и устанавливаю этот адаптер на ViewPager
. Теперь я хочу узнать номер текущей страницы или позицию текущего представления, потому что я хочу запустить некоторые дополнительные события на этой конкретной странице.
Я использовал viewPager.setCurrentItem(1);
для настройки первого пункта.
Есть ли аналогичный способ получения текущей страницы?
android
android-viewpager
sam_k
источник
источник
setOnPageChangeListener()
устарело, используйтеaddOnPageChangeListener()
вместо него.Существует метод,
object_of_ViewPager.getCurrentItem()
который возвращает позицию просматриваемой в данный момент страницы пейджера просмотра.источник
Если вам нужна только позиция, вам
vp.getCurrentItem()
ее предоставят, не нужно применять onPageChangeListener () только для этой цели.источник
Вы поймете, что setOnPageChangeListener устарел, используйте addOnPageChangeListener, как показано ниже:
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) { } });
источник
Для этой проблемы лучше всего подходит прослушиватель Onpagechange. Но у него также будет одна небольшая ошибка, заключающаяся в том, что он не будет определять время начала 0-й позиции. После того, как вы измените страницу, он начнет определять выбранную позицию страницы ... Для этого проблема я нашел самое простое решение
1. Вы должны сохранить выбранное значение позиции, а затем использовать его ....
2. Случай 1: В начале позиции всегда находится ноль ....
Случай 2: Предположим, что если вы установите текущий элемент, вы установите это значение в позицию сохранения
3. Затем выполните свое действие с использованием этой поддержки в своей деятельности ...
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(); } });
источник
getCurrentItem()
, на самом деле не дает правильной позиции для первой и последней страницы, которую я исправил, добавив этот код: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; }
источник
В viewpager нет никакого метода getCurrentItem (). Я уже проверил API
источник
Вы можете использовать OnPageChangeListener и получить позицию внутри
onPageSelected()
метода, это пример: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) { } });
Или просто используйте getCurrentItem (), чтобы получить реальную позицию:
viewPager.getCurrentItem();
источник