【问题标题】:Android ViewPagerIndicator does not refreshAndroid ViewPagerIndicator 不刷新
【发布时间】:2014-02-08 05:32:01
【问题描述】:

首先,我使用以下链接中的 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个圆圈)

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

【问题讨论】:

    标签: android android-viewpager viewpagerindicator


    【解决方案1】:

    我之前也遇到过同样的问题,查看了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>
    

    【讨论】:

    • 谢谢!终于有人提出了一个真正有效的解决方案!
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      setCurrentItem(0) 会为你工作

      【讨论】:

        【解决方案4】:

        这可能有点 hacky,但我无法让任何其他解决方案工作,所以在手动设置页面后,我只是在我的页面指示器上调用了这个:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-24
          • 2019-05-18
          • 1970-01-01
          相关资源
          最近更新 更多