我有一个带有卡片的viewpager,需要向右滑动,直到到达最后一个项目,然后向左滑动直到到达第一个项目。我不知道如何解决这个问题。
SlidesPagerAdapter slidesPagerAdapter = new SlidesPagerAdapter(getFragmentManager());
viewPager.setAdapter(slidesPagerAdapter);
viewPager.setOffscreenPageLimit(3); // To see two cards the sides
viewPager.setClipToPadding(false);
viewPager.setPadding(32,0,32,0);
viewPager.setPageMargin(-16);
// Attach the page change listener inside the activity
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
}
// This method will be invoked when the current page is scrolled
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (position > SlidesPagerAdapter.NUMBER_SLIDES-1) {
viewPager.setCurrentItem(0, true);
}
}
// Called when the scroll state changes:
// SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING
@Override
public void onPageScrollStateChanged(int state) {
int currentPage = viewPager.getCurrentItem(); //ViewPager Type
if (currentPage == SlidesPagerAdapter.NUMBER_SLIDES || currentPage == 0){
previousState = currentState;
currentState = state;
if (previousState == 1 && currentState == 0){
viewPager.setCurrentItem(currentPage == 0 ? SlidesPagerAdapter.NUMBER_SLIDES : 0);
}
}
}
});
当我到达最后一个项目时,行为很好。但当我回到第一个元素并尝试再次滑动时,viewpager会向我显示最后一个元素。
1→ 2 - > 3 - > 4 =>好 4 - > 3 - > 2 - > 1 - > 4 !!!!
答案 0 :(得分:0)
解决方案:
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
}
// This method will be invoked when the current page is scrolled
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
// Called when the scroll state changes:
// SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING
@Override
public void onPageScrollStateChanged(int state) {
int currentPage = viewPager.getCurrentItem(); //ViewPager Type
if (currentPage == SlidesPagerAdapter.NUMBER_SLIDES-1 || currentPage == 0){
previousState = currentState;
currentState = state;
if (previousState == 1 && currentState == 0){
viewPager.setCurrentItem(currentPage == 0 ? 0 : SlidesPagerAdapter.NUMBER_SLIDES-1);
}
}
}
});