Android ViewPager setCurrentItem未加载请求的页面

时间:2016-04-25 07:04:44

标签: android android-viewpager

我正在尝试移动到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。

1 个答案:

答案 0 :(得分:0)

更改

new Handler().post(new Runnable() {
    @Override
    public void run() {
        mPager.setCurrentItem(currentPagePosition);
    }
});

进入

mPager.setCurrentItem(currentPagePosition);
mPagerAdapter.notifyDataSetChanged();

您应该将UI更改相关代码运行到主UI线程中。