在CirclePageIndicator上无法setCurrentItem(0)

时间:2013-04-19 14:52:17

标签: android android-viewpager viewpagerindicator

如果您在活动onCreate()中有此代码:

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

然后启动一个AsyncTask,并希望用第0页更改其onPostExecute()中的当前页面,然后它就不会工作了。它可以与任何其他页面一起使用!= 0,但是在0时它只保留当前位置。

mCirclePageIndicator.setCurrentItem(0);

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

3 个答案:

答案 0 :(得分:3)

解决方法:

首先将另一个页面设置为当前页面,然后设置为第0页。是的,我知道,它是迟钝的,但我仍然没有找到解释为什么它不起作用的原因。我试过在Handler发布它,即使有延迟,但没有。纳达。

mCirclePageIndicator.setCurrentItem(1);
mCirclePageIndicator.setCurrentItem(0);

答案 1 :(得分:0)

我发现CirclePageIndicator.java有一个错误,当我第一次启动 Fragment 时,它不想填充选定的页面圈,但是当我只是触摸我的 ViewPager < / b>,每件事都没问题......那里有虫子:

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);
    }
}

答案 2 :(得分: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。我希望他们能解决这个问题:/