如果您在活动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);
如果有人提出想法,请随时分享。谢谢!
答案 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。我希望他们能解决这个问题:/