Как вы получаете текущий номер страницы ViewPager для Android?
Я хочу узнать текущую позицию страницы ViewPager
. Я создаю адаптер и устанавливаю этот адаптер в ViewPager
. Теперь я хочу узнать текущий номер страницы или позицию текущего представления, потому что я хочу начать некоторые дополнительные события на этой конкретной странице.
Я использовал viewPager.setCurrentItem(1);
для установки первого элемента.
Есть ли аналогичный метод для получения текущей страницы?
Ответы
Ответ 1
в последних пакетах вы также можете использовать
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;
}
}
Ответ 2
Существует метод object_of_ViewPager.getCurrentItem()
, который возвращает позицию текущей просматриваемой страницы пейджера просмотра
Ответ 3
Если вам нужна только позиция, vp.getCurrentItem()
предоставит ее вам, вам не нужно применять onPageChangeListener() только для этой цели.
Ответ 4
Для этой проблемы прослушиватель 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();
}
});
Ответ 5
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;
}
Ответ 6
Вы поймете, что 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) {
}
});
Ответ 7
Нет никакого метода getCurrentItem() в viewpager.i уже проверял API
Ответ 8
Метод 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();