1

私は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メソッドがこの大騒ぎの犯人であることを示しました。新しいアダプターを設定するプロセスをスピードアップする方法はありますか?

..または、これを行う別の方法はありますか?

前もって感謝します!

4

0 に答える 0