4

これで、Android で画面をページングViewPagerすることができました。ViewPagerIndicator

1000をオーバーライドgetCount()FragmentStatePagerAdapterて 1000 を返し、1000 ページにします。カレンダー (dd/MM/yyyy) に基づくページ タイトルを取得するには、いくつかのコードを実行する必要があります。スクロールするたびに、1000 ページのタイトルがすべて再構築されていることがわかります (ログを Adapter#getPageTitle(int) に出力します)。

これにより、ページャーのスクロールが非常に遅くなり、スムーズではなくなります。

1 ページをスクロールするときに ViewPagerIndicator がすべてのページ タイトルを再構築するべきではないと思います。

更新: アダプターのソース コードを追加します。

public class ResultAdapter extends FragmentStatePagerAdapter {
    public ResultAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return 1000;
    }


    @Override
    public Fragment getItem(int position) {
        Log.d("xskt", "Adapter.GetItem.position=" + position);
        Calendar calendar = Utilities.selectedProvince.getLastDay(Utilities.selectedCalendar, Utilities.pagerSize - position - 1);
        ResultView resultView = new ResultView(Utilities.selectedProvince, calendar);
        resultView.setTitle(calendar.get(Calendar.DAY_OF_MONTH) + "/" + (calendar.get(Calendar.MONTH) + 1));
        return resultView;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        // Calendar calendar;

                //DO SOME CALCULATE WITH CALENDAR

        // String title = calendar.get(Calendar.DAY_OF_MONTH) + "/" + (calendar.get(Calendar.MONTH) + 1);
        // return title;
        Log.d("xskt","get page title");
        return ((ResultView) getItem(position)).getTitle();
    }

}
4

1 に答える 1

1

同じことが必要でした。これが私が行ったコードです。基本的に、新しいフラグメントの位置に基づいて表示するタイトルを計算します。

デフォルトでは、現在の日付に対応するフラグメントが表示されます。位置が変更された場合は、現在の位置と新しい位置の差を取得し、それに応じて日付を変更して表示します。

public class RateFragmentPagerAdapter extends FragmentStatePagerAdapter{

private final int todayPosition;
private RateFragment currentFragment;
private final Calendar todayDate;

/** Constructor of the class */
public RateFragmentPagerAdapter(FragmentManager fm, int today_position, Calendar today_date) {
    super(fm);
    todayPosition = today_position;
    todayDate = (Calendar) today_date.clone();
}

/** This method will be invoked when a page is requested to create */
@Override
public Fragment getItem(int arg0) {     
    currentFragment = new RateFragment();
    Bundle data = new Bundle();

    data.putInt("current_page", arg0);
    currentFragment.setArguments(data);
    return currentFragment;
}

/** Returns the number of pages */
@Override
public int getCount() {     
    return RateDayApplication.numberOfDays;
}

@Override
public CharSequence getPageTitle(int position) {
    Calendar newDate = (Calendar) todayDate.clone();

    int diffDays = position - todayPosition;
    newDate.add(Calendar.DATE, diffDays);

    return RateDayApplication.dateTitleFormat.format(newDate.getTime());
}   

}

フラグメント オブジェクトを呼び出さないので高速です。現在の位置 (最終) と関数内の新しい位置を比較するだけです。

于 2013-04-14T04:56:45.600 に答える