Viewpager in Android to switch between days endlessly

倖福魔咒の 提交于 2019-11-28 08:51:00

I have fixed this problems a little time ago, this code is a bit based ont the answer from Kuffs but I dont't get the date in an array because it's a lot of performance to put a lot of days in array.

Summarry of code (1) The code makes a fragmentpager with around 10.000 pages in it. On main activity init the app set te current page in the middle(5000)

pager.setAdapter(new BootstrapPagerAdapter(getResources(), getSupportFragmentManager()));
        pager.setCurrentItem(5000, false);
        pager.post(new Runnable() {
                            public void run() {
                            pager.setCurrentItem(5000, false);
                        }
                    });
        pager.getAdapter().notifyDataSetChanged();
        pager.setOffscreenPageLimit(0);

Summary of code (2) in the bootstrappageradapter

The code looks what position the user has scrolled and looks for the date now

   DateTime pagerdate = DateTime.now(TimeZone.getDefault());
   DateTime days = pagerdate.plusDays(position - 5000);

e.g. user swiped five days next. position is 5003 so the sum is 5003-5000=3 days

the days count easily plus 3 days with date4j library (I highly recommend it!) then I make a new fragment with the date in its bundle!

public class BootstrapPagerAdapter extends FragmentPagerAdapter  {

/**
 * Create pager adapter
 *
 * @param resources
 * @param fragmentManager
 */
public BootstrapPagerAdapter(Resources resources, FragmentManager fragmentManager) {
    super(fragmentManager);
}

@Override
public int getCount() {
    return 10000;
}
@Override
public int getItemPosition(Object object){
    return FragmentStatePagerAdapter.POSITION_NONE;
}
@Override
public Fragment getItem(int position) {

    DateTime pagerdate = DateTime.now(TimeZone.getDefault());
    DateTime days = pagerdate.plusDays(position - 5000);

    Bundle bundle = new Bundle();
    bundle.putString("date", days.format("YYYY-MM-DD").toString());

    RoosterFragment roosterFragment = new RoosterFragment();
    roosterFragment.setArguments(bundle);

    return roosterFragment;
}
}

You could fake the endlessly count with more high numbers like year 0001 year 3999

Around the: 1.500.000 days believe me no one is gonna go this far all the way swiping! I've tried the a lot infinite examples but this is the only working example I think!

Upvote if it worked for you and don't be shy to ask for more examples or help with your app!

However it would be cool if someone got something like a really infinte viewpager without fake counts and so on ;)

Create a pageradapter that contains an array of the dates you want to support. You can pass this array in on the constructor.

Override getCount to return the correct number of dates in the array.

Override getItem and return a fragment from it with the date initialised based on the position parameter.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!