私が気付いている問題は、ユーザーが の次の (または前の) ページにスクロールしたときに発生し、そのページへの の解決 (確認?)ViewPager
がトリガーされます。が安定しViewPager
ている間にユーザーがドラッグを開始しない限り、これは完全に機能します。ViewPager
このシナリオでは、次の (または前の) ページをTitlePageIndicator
表示しているときに、2 ページ後 (または前) のタイトルが表示されViewPager
ます。
そのページ (タイトルとコンテンツが一致していないページ) が落ち着いた後にユーザーがスワイプを開始すると、タイトルはすぐに正しいタイトルに更新されます。ViewPager.OnPageChangeListener
「ユーザーがドラッグを開始したとき、ページャーが現在のページに自動的に落ち着いているときを発見するのに役立ちます」と言っているのを見るとonPageScrollStateChanged(int)
、これが問題のようですが、解決する方法を使用する方法が見つかりませんでした問題。
私は Jake Wharton のcom.viewpagerindicator.TitlePageIndicator
withandroid.support.v4.view.ViewPager
を使用して、カレンダーの日のビューをレンダリングしています。左/右にスワイプすると、前/次の暦日に移動します。これは、可視日、可視日の前日、可視日の翌日に対応するViewPager
3 つに基づいて無限のページネーションを実装するように my が設定されていることを意味します。Fragments
MyViewPager.OnPageChangeListener
はこのように構成され、TitlePageIndicator
_title.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
private int _focused_page = _VISIBLE;
private boolean _is_settling = false;
@Override
public void onPageScrollStateChanged(int state) {
if (state == ViewPager.SCROLL_STATE_IDLE) {
if (_focused_page == _PREVIOUS)
moveToPrevious();
else if (_focused_page == _NEXT)
moveToNext();
// always set to middle page to continue to be able to
// scroll left/right
if (_paginator.getCurrentItem() != _VISIBLE)
_paginator.setCurrentItem(_VISIBLE, false);
_is_settling = false;
} else if (state == ViewPager.SCROLL_STATE_DRAGGING && _is_settling) {
Ln.d("Double scrolled!");
_title.setCurrentItem(_paginator.getCurrentItem());
_title.invalidate();
} else if (state == ViewPager.SCROLL_STATE_SETTLING) {
_is_settling = true;
}
}
@Override
public void onPageSelected(int position) {
_focused_page = position;
}
});
私は約3つの解決策があると思います
- 決済中のユーザー ドラッグ イベントの送信または応答を無効にする
- 整定中にドラッグが発生したときに通知し、無効になった後に正しいタイトルを回復する
ViewPager
最初のドラッグのように 2 回目のドラッグで を移動すると、すべてが元の表示日より 2 ページ後 (または前) になります。
編集:正しいタイトルでタイトルを再描画するために再度TitlePageIndicator
呼び出す
ように強制する方法はありますか?getPageTitle(int)