Android ViewPagerIndicator не обновляется

прежде всего, я использую ViewPagerIndicator по следующей ссылке, чтобы отобразить количество просмотров внутри моего пейджера: http://viewpagerindicator.com/

Я использовал CirclePageIndicator только с обычным кодом... мой XML выглядит так:

<FrameLayout
    android:id="@+id/detailFragment"
    android:name="detailFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <com.viewpagerindicator.CirclePageIndicator
        android:id="@+id/pageIndicator"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        app:fillColor="@android:color/black"
        app:pageColor="@android:color/white"
        app:radius="6dp"
        app:strokeColor="@android:color/darker_gray"
        app:strokeWidth="1dp" />
</FrameLayout>

Мой java-код для установки адаптера и индикатора также не представляет собой ничего особенного и будет опубликован ниже (из моего класса активности)

  final ViewPager pager = (ViewPager) this.findViewById(R.id.viewpager);
  final DutyViewPager adapter = new DutyViewPager(this.getFragmentManager(), pkid, pager.getAdapter());
  pager.setAdapter(adapter);
  final CirclePageIndicator cIndicator = (CirclePageIndicator) this.findViewById(R.id.pageIndicator);
  cIndicator.setViewPager(pager);

Проблема. Допустим, у нас есть навигация с двумя элементами, связанными с двумя разными ViewPagerAdapter. Первый элемент ссылается на адаптер A, который отображает количество 2 фрагментов, а второй элемент ссылается на адаптер B, который отображает количество 3 фрагментов. После нажатия на первый элемент мое представление обновится с помощью адаптера A, загрузив первый фрагмент из адаптера и показав 2 круга в качестве счетчика адаптера - так что в основном все так ожидается до сих пор. После нажатия на второй элемент мое представление загружает адаптер B, но представление по-прежнему показывает только 2 круга, поэтому я предполагаю, что индикатор не обновляется или что-то в этом роде. .. проблема исправлена ​​в тот момент, когда я смахиваю вправо, чтобы отобразить следующий фрагмент в адаптере B. (показывает 3 круга после свайпа)

Просто интересно, это только у меня или у кого-то еще есть эта проблема (и решение)?


person user1502353    schedule 08.01.2013    source источник


Ответы (4)


У меня была такая же проблема раньше, изучив метод onDraw в CirclePageIndicator.java, я обнаружил, что это было вызвано установкой для привязки значения true. После изменения привязки на false все выглядит хорошо.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="StyledIndicators" parent="Theme.Light">
        <item name="vpiCirclePageIndicatorStyle">@style/CustomCirclePageIndicator</item>
    </style>

    <style name="CustomCirclePageIndicator">
        <item name="snap">false</item>
    </style>
</resources>
person Kai-jie Ke    schedule 10.06.2013
comment
Спасибо! наконец-то у кого-то есть решение, которое действительно сработало! - person Adam Johns; 24.07.2013

Очень поздний ответ, но вам нужно вызвать notifyDataSetChanged() для вашего экземпляра ViewPagerIndicator.

person tafty    schedule 04.04.2013

setCurrentItem(0) будет работать на вас

person dracula    schedule 03.05.2013

Возможно, это немного хакерски, но я не мог заставить работать какие-либо другие решения, поэтому после ручной настройки страницы я просто вызвал это на своем индикаторе страницы:

titleIndicator.onPageScrolled(mViewPager.getCurrentItem(), 0, 0);
person andygeers    schedule 07.02.2014