Search code examples
androidandroid-fragmentsandroid-viewpager

How to implement ViewPager with fragments in AndroidX


since Google introduced androidX I'm having a problem with viewpager. I want to make a tab layout where I can swipe between fragments. getSupportFragmentManager() is deprecated now and shows an error

ViewPagerAdapter(FragmentManager, int) in ViewPagerAdapter cannot be applied to (FragmentManager)

Here is my adapter:

public class ViewPagerAdapter extends FragmentPagerAdapter {

    public ViewPagerAdapter(@NonNull FragmentManager fm, int behavior) {
        super(fm, behavior);
    }

    @NonNull
    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new RecentFragment();
            case 1:
                return new TracksFragment();
            case 2:
                return new AlbumFragment();
            case 3:
                return new GenresFragment();
        }
        return null;
    }

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

and in my activity I need to call it

 ViewPager viewPager = findViewById(R.id.view_pager);
 viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager());

I found the solution, in the constructor I have second paremeters and in the viewpager I added page position and is working fine.

public static int PAGE_POSITION = 4;

 ViewPager viewPager = findViewById(R.id.view_pager);

viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager(), PAGE_POSITION));
TabLayout tab = findViewById(R.id.tab_layout);
tab.setupWithViewPager(viewPager); 

Solution

  • Your ViewPagerAdapter class has a constructor that takes 2 parameters.
    When you try to create a new ViewPagerAdapter, you only use 1 parameter.
    Which is exactly what the error message is telling you.

    Look at the documentation for the FragmentPagerAdapter class and see what the 2nd parameter should be.