2013-04-19 1 views
3

Если у вас есть этот код в деятельности onCreate():Не может setCurrentItem (0) на CirclePageIndicator

Затем запустить в AsyncTask и хочет изменить текущую страницу в это onPostExecute() со страницей 0, то он не будет Работа. Он работает с любой другой страницей! = 0, но с 0 он просто сохраняет текущую позицию.

mCirclePageIndicator.setCurrentItem(0); 

Если кто-нибудь придумает идею, не стесняйтесь делиться ею. Благодаря !

ответ

3

Обход:

Сначала установите другую страницу в качестве текущей страницы, а затем установить на странице 0. Да, я знаю, что это отсталый, но я до сих пор не нашли экспликации, почему это ISN» т, в первую очередь. Я пробовал отправить его в Handler, даже с задержкой, но ничего. Нада.

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

Я бы предположил его, потому что индикатор принимает его на странице 0 для начала. –

+0

После добавления новых элементов в адаптер, а также изменения положения на экране? Не думайте так ... –

+0

Действительно здорово, что вы получили эту работу. Я пытался понять это на некоторое время. Было бы интересно понять механику немного больше. – abriggs

0

я выяснил, что CirclePageIndicator.java есть ошибка, она не хочет, чтобы заполнить выделенную страницу круг, когда я первый начинаю свой фрагмент, но когда я просто коснуться моего 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); 
    } 
} 

positionOffset возвращаемого Nan, когда я инициализируюсь мои взгляды в OnCreate, в результате чего 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

Что работал для меня устанавливает 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); 
    } 

Это ужасно хакерское явление. Я надеюсь, что они исправят это:/