ViewPager没有显示正确的页面

时间:2015-03-02 18:04:51

标签: android android-viewpager

我试图在不使用Fragments的情况下实现ViewPager。让我们说,我有一个非特定数量的数据存储在某种数据库中,映射到特定的日期。我想要做的是在ViewPager页面上显示特定日期的数据。

这就是我目前正在做的事情:

@Override
protected void onCreate(Bundle savedInstanceState) {
    dataList = (ViewPager) findViewById(R.id.dataList);
    dataList.setAdapter(new DataListSlidePagerAdapter());
    dataList.setCurrentItem(Integer.MAX_VALUE / 2);
}

private class DataListSlidePagerAdapter extends PagerAdapter {
    int lastPosition;

    @Override
    public Object instantiateItem(ViewGroup collection, int position) {
        if (position > lastPosition) {
            GregorianCalendar today = Settings.getCurrentDay();
            today.add(GregorianCalendar.DATE, 1);
            Settings.loadData();
        }
        else if (position < lastPosition) {
            GregorianCalendar today = Settings.getCurrentDay();
            today.add(GregorianCalendar.DATE, -1);
            Settings.loadData();
        }
        lastPosition = position;

        LinearLayout v = createDataList(Settings.getTodaysData());
        collection.addView(v);
        return v;
    }

    @Override
    public void destroyItem(ViewGroup collection, int position, Object view) {
        ((ViewPager) collection).removeView((LinearLayout) view);
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == ((View) arg1);
    }

    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}

这实际上几乎可以工作,但不幸的是,当前数据从未显示在当前页面上,而是显示在下一页或上一页上。我的猜测是,这是因为instantiateItem不一定构建当前页面的视图,而是构建下一个可能需要显示的页面。但是,createListData()始终会创建当天的视图。

知道如何修复此问题并在正确的页面上显示正确的数据吗?您可以假设,还有Settings.getTomorrowsData()Settings.getYesterdaysData()等功能。

0 个答案:

没有答案