0

I am using ViewPager2, and I get the following error on viewPager2.setAdapter:

incompatible types: ViewPagerAdapter cannot be converted to Adapter

MainActivty

viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(),fragmentList);
viewPager2.setAdapter(viewPagerAdapter);

ViewPagerAdapter

public class ViewPagerAdapter extends FragmentStatePagerAdapter {

    private List<PagerFragment> fragments;


    public ViewPagerAdapter(FragmentManager fm, List<PagerFragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    /* (non-Javadoc)
     * @see android.support.v4.app.FragmentPagerAdapter#getItem(int)
     */
    @Override
    public Fragment getItem(int position) {
        return this.fragments.get(position);
    }

    /* (non-Javadoc)
     * @see android.support.v4.view.PagerAdapter#getCount()
     */
    @Override
    public int getCount() {
        return this.fragments.size();
    }
}
Ryan M
  • 18,333
  • 31
  • 67
  • 74
Amir Dora.
  • 2,831
  • 4
  • 40
  • 61

2 Answers2

2

You're trying to use a ViewPager v1 adapter with ViewPager2. You should convert your adapter to implement FragmentStateAdapter instead.

See this section of the migration documentation for more information. In particular, you'll want to rename your getCount method to getItemCount, as well as renaming getItem to createFragment and making it return a new Fragment each time rather than re-using instances.

Ryan M
  • 18,333
  • 31
  • 67
  • 74
1
public class ViewPagerAdapter extends FragmentPagerAdapter {

private ArrayList<Fragment> fragments;
private ArrayList<String> titles;

public ViewPagerAdapter(FragmentManager fm){
    super(fm);
    this.fragments=new ArrayList<>();
    this.titles=new ArrayList<>();

}


@NonNull
@Override
public Fragment getItem(int position) {
    return fragments.get(position);
}

@Override
public int getCount() {
    return fragments.size();
}


public void addFragment(Fragment fragment, String title){

    fragments.add(fragment);
    titles.add(title);

}

@Nullable
@Override
public CharSequence getPageTitle(int position) {
    return titles.get(position);
}

}

Shimaa Yasser
  • 587
  • 4
  • 12