简体   繁体   English

Androidx ViewPager2 不兼容类型:ViewPagerAdapter 无法转换为 Adapter

[英]Androidx ViewPager2 incompatible types: ViewPagerAdapter cannot be converted to Adapter

I am using ViewPager2, and I get the following error on viewPager2.setAdapter :我正在使用 ViewPager2,在viewPager2.setAdapterviewPager2.setAdapter以下错误:

incompatible types: ViewPagerAdapter cannot be converted to Adapter不兼容的类型:ViewPagerAdapter 无法转换为 Adapter

MainActivty主要活动

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

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

You're trying to use a ViewPager v1 adapter with ViewPager2 .您正在尝试将ViewPager v1 适配器与ViewPager2一起ViewPager2 You should convert your adapter to implement FragmentStateAdapter instead.您应该将您的适配器转换为实现FragmentStateAdapter

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.特别是,您需要将getCount方法重命名为getItemCount ,并将getItem重命名为createFragment并使其每次返回一个新的Fragment而不是重复使用实例。

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

} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM