我正在尝试移动到viewPager中的指定页面。
我的代码是 -
if(isFirstCall) {
mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager(), pageId);
mPager.setAdapter(mPagerAdapter);
}
new Handler().post(new Runnable() {
@Override
public void run() {
mPager.setCurrentItem(currentPagePosition);
}
});
mPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
private static final float thresholdOffset = 0.5f;
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
if (checkDirection) {
mPager.setPagingEnabled(false);
if (thresholdOffset > positionOffset) {
checkDirection = false;
// Call service to get next page position
} else {
checkDirection = false;
// Call service to get prev page position
}
}
}
@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
if ((scrollStarted == false) && (state == ViewPager.SCROLL_STATE_DRAGGING) ) {
scrollStarted = true;
checkDirection = true;
} else {
scrollStarted = false;
}
}
@Override
public void onPageSelected(int position) {
}
});
当我尝试更新currentPagePosition变量时,viewPager会挂起并且不会立即移动到指定的页面。 (据观察,在大约10-15分钟后,调用指定的页面。)
然而,如果我不修改currentPagePosition变量的值,一切正常(但是当我得到错误的值时它会移动到另一个页面)。
我无法理解出了什么问题。
请帮助..
观察 -
我的观察是 - onPageScrollStateChanged方法没有调用state = 1.导致onPageScrolled中的条件失败。所以下一页没有被调用。我不知道为什么没有为状态'SCROLL_STATE_DRAGGING'调用onPageScrollStateChanged。
答案 0 :(得分:0)
更改
new Handler().post(new Runnable() {
@Override
public void run() {
mPager.setCurrentItem(currentPagePosition);
}
});
进入
mPager.setCurrentItem(currentPagePosition);
mPagerAdapter.notifyDataSetChanged();
您应该将UI更改相关代码运行到主UI线程中。