Viewpager in Android to switch between days endlessly

后端 未结 2 1086
感情败类
感情败类 2020-12-09 14:34

I am currently making a app where students can view there lesson grid. The lessons are retrieved using a json file. Now the date changing is done via buttons in the actionba

2条回答
  •  情歌与酒
    2020-12-09 14:46

    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 ;)

提交回复
热议问题