私はGridView
私の3ページに横たわっていますViewPager
。アイデアは、ユーザーが望む限り無限にスクロールするカレンダーの月間ビューを作成することです。
私は主にJon Willisの無限ビュー ページングの実装に基づいて作業を行いました。View
しかし、私自身のオブジェクトを実装する代わりに; Sを使用してGridView
います。
onPageScrollStateChanged
メソッドの実装は次のとおりです。
@Override
public void onPageScrollStateChanged(int state) {
if (state == ViewPager.SCROLL_STATE_IDLE) {
FragmentPagerAdapter adapter = (FragmentPagerAdapter) mMonthPager
.getAdapter();
// Called to obtain reference for the Fragments inside the ViewPager.
CalendarGridMonthlyFragment oldMinMonthFragment = (CalendarGridMonthlyFragment) adapter
.instantiateItem(mMonthPager, 0);
CalendarGridMonthlyFragment oldMidMonthFragment = (CalendarGridMonthlyFragment) adapter
.instantiateItem(mMonthPager, 1);
CalendarGridMonthlyFragment oldMaxMonthFragment = (CalendarGridMonthlyFragment) adapter
.instantiateItem(mMonthPager, 2);
// Get the selected month for each Fragment.
final Calendar oldMinMonth = oldMinMonthFragment.getSelectedMonth();
final Calendar oldMidMonth = oldMidMonthFragment.getSelectedMonth();
final Calendar oldMaxMonth = oldMaxMonthFragment.getSelectedMonth();
if (mFocusedPage == 0) {
final Calendar newMonth = (Calendar) oldMinMonth.clone();
newMonth.add(Calendar.MONTH, -1);
oldMinMonthFragment.setSelectedMonth(newMonth);
oldMidMonthFragment.setSelectedMonth(oldMinMonth);
oldMaxMonthFragment.setSelectedMonth(oldMidMonth);
} else if (mFocusedPage == 2) {
final Calendar newMonth = (Calendar) oldMaxMonth.clone();
newMonth.add(Calendar.MONTH, 1);
oldMinMonthFragment.setSelectedMonth(oldMidMonth);
oldMidMonthFragment.setSelectedMonth(oldMaxMonth);
oldMaxMonthFragment.setSelectedMonth(newMonth);
}
mMonthPager.setCurrentItem(1, false);
}
}
そして、ここに私のsetSelectedMonth
方法があります:
public void setSelectedMonth(Calendar value) {
mMonth = value.get(Calendar.MONTH);
mYear = value.get(Calendar.YEAR);
CalendarGridMonthlyAdapter newAdapter = new CalendarGridMonthlyAdapter(
mContext, GRID_CHIP, mGridWidth, mGridHeight,
mMonth, mYear);
mGridView.setAdapter(newAdapter);
}
無限スワイプが機能します。しかし、スクロールが終了した後、ほぼ 0.5 秒ほどちらつきが目立ちます。
デバッグは、setAdapter
メソッドがこの大騒ぎの犯人であることを示しました。新しいアダプターを設定するプロセスをスピードアップする方法はありますか?
..または、これを行う別の方法はありますか?
前もって感謝します!