3

如果您在 Activity 中有此代码onCreate()

mViewPager = new ViewPager(this, null);
mPagerAdapter = new PagerAdapter(this);
mViewPager.setAdapter(mPagerAdapter);
mCirclePageIndicator.setViewPager(mViewPager);
mCirclePageIndicator.setOnPageChangeListener(onPageChangeListener);

然后启动一个 AsyncTask 并希望将当前页面更改为onPostExecute()第 0 页,那么它将无法正常工作。它适用于任何其他页面!= 0,但使用 0 它只保留当前位置。

mCirclePageIndicator.setCurrentItem(0);

如果有人提出想法,请随时分享。谢谢 !

4

3 回答 3

3

解决方法:

首先将另一个页面设置为当前页面,然后设置为第 0 页。是的,我知道,它是延迟的,但我仍然没有找到关于它为什么不工作的解释。我已经尝试将它发布在 中Handler,即使有延迟,但什么也没有。纳达。

mCirclePageIndicator.setCurrentItem(1);
mCirclePageIndicator.setCurrentItem(0);
于 2013-04-19T14:52:17.043 回答
0

我发现 CirclePageIndicator.java 有一个错误,当我第一次启动我的Fragment时它不想填充选定的页面圆圈,但是当我触摸我的ViewPager时,一切都很好......错误就在那里:

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    mCurrentPage = position;
    mPageOffset = positionOffset; // error here
    invalidate();

    if (mListener != null) {
        mListener.onPageScrolled(position, positionOffset, positionOffsetPixels);
    }
}

当我在onCreate初始化我的视图时positionOffset返回Nan 这导致onDraw()不绘制我选择的圆圈的填充

解决方案是在分配之前检查positionOffset值,例如:

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    mCurrentPage = position;
    mPageOffset = (positionOffset > 0) ? positionOffset : 0;
    invalidate();

    if (mListener != null) {
        mListener.onPageScrolled(position, positionOffset, positionOffsetPixels);
    }
}
于 2015-03-16T12:38:12.747 回答
0

对我有用的是indicator.onPageSelected(0)调用后设置setCurrentItem(0)。看一下代码,它所做的是将 设置mSnapPage为位置,否则不会这样做。

@Override
public void onPageSelected(int position) {
    if (mSnap || mScrollState == ViewPager.SCROLL_STATE_IDLE) {
        mCurrentPage = position;
        mSnapPage = position;
        invalidate();
    }

    if (mListener != null) {
        mListener.onPageSelected(position);
    }

不过,这非常hacky。我希望他们修复它:/

于 2015-09-15T14:51:41.880 回答