4

现在我有一个ViewPager并且ViewPagerIndicator可以在 Android 上分页我的屏幕。

我覆盖getCount()FragmentStatePagerAdapter返回 1000 以拥有 1000 页。我需要做一些代码来获取基于日历的页面标题(dd/MM/yyyy)。每次滚动时,我都会看到所有 1000 个页面标题都已重建(我在 Adapter#getPageTitle(int) 打印日志)。

这使我的寻呼机滚动非常缓慢,不再流畅。

我认为 ViewPagerIndicator 不应该在我滚动 1 页时重建所有页面标题。

更新:添加适配器的源代码

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 回答