无法在CirclePageIndicator上调用setCurrentItem(0)

3
如果你在Activity的onCreate()方法中有以下代码:
mViewPager = new ViewPager(this, null);
mPagerAdapter = new PagerAdapter(this);
mViewPager.setAdapter(mPagerAdapter);
mCirclePageIndicator.setViewPager(mViewPager);
mCirclePageIndicator.setOnPageChangeListener(onPageChangeListener);

如果启动一个异步任务,并希望在其 onPostExecute() 中将当前页面更改为页面 0,则无法实现。它可以使用任何其他页 != 0,但是对于 0,它只会保留当前位置。

mCirclePageIndicator.setCurrentItem(0);

如果有人有想法,欢迎分享。谢谢!
3个回答

3

解决方法:

首先将另一页设置为当前页,然后再设置为第0页。是的,我知道这很蠢,但我还没有找到为什么一开始不起作用的解释。我尝试过在Handler中发布它,即使有延迟,但仍然无效。没什么。

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

我认为这是因为指示器假定它从第0页开始。 - Justin Breitfeller
在适配器中添加新项并更改屏幕上的位置后?我觉得不是这样... - Bogdan Zurac
你做得真棒!我已经试了好一段时间了,还是没搞明白。能深入了解一下机制会很有趣。 - abriggs

0
我发现CirclePageIndicator.java有一个bug,当我第一次启动我的Fragment时,它不想填充选定页面的圆圈,但是当我刚刚触摸我的ViewPager时,一切都正常了...这个bug就在那里:
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    mCurrentPage = position;
    mPageOffset = positionOffset; // error here
    invalidate();

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

当我在< b>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);
    }
}

0
我的解决方法是在调用setCurrentItem(0)之后设置indicator.onPageSelected(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);
    }

这个方法非常不专业,希望他们能够修复 :/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接