Reputation: 3237
I use this way to get ViewPager's current View :
private class OuterAdapter extends PagerAdapter{
private SwipingVideoPage currentPage;
@Override
public Object instantiateItem(ViewGroup container, int position) {
SwipingVideoPage page = new SwipingVideoPage();
container.addView(page);
return page;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View)object);
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
currentPage = (SwipingVideoPage)object;
super.setPrimaryItem(container, position, object);
}
public SwipingVideoPage getCurrenPage() {
return currentPage;
}
}
I think I can call ViewPager.getAdapter.getCurrentPage()
to get current view. But I found it's not work in ViewPager.OnPageChangeListener.onPageSelected()
:
private class OuterChangeListener implements ViewPager.OnPageChangeListener {
@Override
public void onPageSelected(int position) {
((OuterAdapter)outerViewPager.getAdapter()).getCurrenPage() //this returns the previous shown view, not the right one
}
}
Maybe the onPageSelected()
is called before setPrimaryItem()
, is this correct ?
And how to get ViewPage
's primary view in onPageSelected()
?
Upvotes: 1
Views: 4588
Reputation: 3237
Just as @Mohammad Fareed said, I didn't find a method to get the current page directly in ViewPager
.
So I use this way to solve the problem:
private Map<Integer, View> pageMap; //records all the pages in the ViewPager
private SwipingVideoPage currentPage;
private class OuterAdapter extends PagerAdapter{
@Override
public Object instantiateItem(ViewGroup container, int position) {
SwipingVideoPage page = new SwipingVideoPage();
container.addView(page);
pageMap.put(position, page); //add page
return page;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View)object);
pageMap.remove(position); //remove page which is removed from ViewPager
}
}
private class OuterChangeListener extends ViewPager.SimpleOnPageChangeListener {
@Override
public void onPageSelected(int position) {
currentPage = pageMap.get(position); //get current page
}
}
I use these code in my project, and it works great until now.
Upvotes: 5
Reputation: 1692
in the latest packages you can also use
vp.getCurrentItem()
or
vp is the viewPager ,
pageListener = new PageListener();
vp.setOnPageChangeListener(pageListener);
you have to put a page change listener for your viewPager. There is no method on viewPager to get the current page.
private int currentPage;
private static class PageListener extends SimpleOnPageChangeListener{
public void onPageSelected(int position) {
Log.i(TAG, "page selected " + position);
currentPage = position;
}
}
Upvotes: -2