Android ViewPagerIndicator不刷新

时间:2013-01-08 08:28:00

标签: android android-viewpager viewpagerindicator

首先,我使用以下链接中的ViewPagerIndicator来显示我的view-pager内部的观看次数: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个圆圈)

只是想知道这只是我还是其他人也遇到了这个问题(以及解决方案)?

4 个答案:

答案 0 :(得分:3)

之前我遇到过同样的问题,在查看CirclePageIndicator.java中的onDraw方法后,我发现它是由snap设置为true引起的。将snap更改为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>

答案 1 :(得分:1)

回复非常晚,但您需要在ViewPagerIndicator实例上调用notifyDataSetChanged()。

答案 2 :(得分:1)

setCurrentItem(0)将适合你

答案 3 :(得分:0)

或许有点hacky,但我无法使任何其他解决方案起作用,因此在手动设置页面后,我只是在我的页面指示器上调用它:

titleIndicator.onPageScrolled(mViewPager.getCurrentItem(), 0, 0);