3

まず、次のリンクから 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);

問題: たとえば、2 つの異なる ViewPagerAdapter にリンクされた 2 つの要素を持つナビゲーションがあるとします。最初の要素はアダプターAにリンクし、 2 つのフラグメントのカウントを表示し、2 番目の要素はアダプターBにリンクし、 3 つのフラグメントのカウントを表示します。最初の要素をクリックすると、ビューがアダプターAで更新され、アダプターから最初のフラグメントが読み込まれ、2 つの円がアダプター カウントとして表示されます。2 番目の要素をクリックした後、私のビューはアダプターBをロードしていますが、ビューにはまだ 2 つの円しか表示されていません。インジケーターが更新されていないか何かだと思います...右側にスワイプしてアダプター Bの次のフラグメントを表示すると、問題は修正されます。(スワイプすると3つの円が表示されます)

それは私だけなのか、それとも他の誰かがこの問題 (および解決策) を持っているのか疑問に思っていますか?

4

4 に答える 4

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>
于 2013-06-10T08:34:27.673 に答える
1

setCurrentItem(0) はあなたのために働く

于 2013-05-03T15:51:49.890 に答える
0

おそらく少しハックですが、他のソリューションを機能させることができなかったので、ページを手動で設定した後、ページインジケーターでこれを呼び出しました:

titleIndicator.onPageScrolled(mViewPager.getCurrentItem(), 0, 0);
于 2014-02-07T21:32:01.370 に答える