Как получить текущий номер страницы ViewPager для Android?
Я хочу знать текущую позицию страницы ViewPager. Я создаю адаптер и установить адаптер в ViewPager. Теперь я хочу знать номер текущей страницы или положение текущего представления, потому что я хочу начать некоторые дополнительные события на этой конкретной странице.
Я viewPager.setCurrentItem(1); настройки первого пункта.
есть ли аналогичный метод для получения текущей страницы?
8 ответов:
в последних пакетах вы также можете использовать
vp.getCurrentItem()или
vp-это viewPager,
pageListener = new PageListener(); vp.setOnPageChangeListener(pageListener);вы должны поставить прослушиватель изменения страницы для вашего viewPager. На viewPager нет метода для получения текущей страницы.
private int currentPage; private static class PageListener extends SimpleOnPageChangeListener{ public void onPageSelected(int position) { Log.i(TAG, "page selected " + position); currentPage = position; } }
есть метод
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) { } });
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; }
для этой проблемы onpagechange listener является лучшим, но он также будет иметь одну небольшую ошибку, которая не будет обнаруживать время начала времени 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(); } });
The setOnPageChangeListener () метод устарел. Использовать addOnPageChangeListener (OnPageChangeListener) вместо.
можно использовать 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();
Comments