迁移到AndroidX ViewPager2时出现Cannot resolve method 'super(FragmentManager)'报错
问题原因
AndroidX 中为 ViewPager2 提供的 FragmentStateAdapter 不存在仅接收 FragmentManager 作为参数的构造方法,这是和旧版 ViewPager 配套的 FragmentPagerAdapter/FragmentStatePagerAdapter 最常见的 API 差异。
解决方案
修改 Adapter 构造方法,补充Lifecycle参数即可:
class ViewPagerAdapter extends FragmentStateAdapter { private ArrayList<Fragment> fragments; private ArrayList<String> titles; // 调整构造方法参数,增加Lifecycle入参 ViewPagerAdapter(FragmentManager fm, Lifecycle lifecycle){ super(fm, lifecycle); this.fragments = new ArrayList<>(); this.titles = new ArrayList<>(); } // 必须实现的两个方法,不要遗漏 @Override public int getItemCount() { return fragments.size(); } @NonNull @Override public Fragment createFragment(int position) { return fragments.get(position); } // 如果需要搭配TabLayout显示标题,额外重写该方法 @Nullable public CharSequence getPageTitle(int position) { return titles.get(position); } // 补充添加页面的方法 public void addFragment(Fragment fragment, String title) { fragments.add(fragment); titles.add(title); } }
初始化调用示例
- 在 Activity 中初始化:
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(), getLifecycle());
- 在 Fragment 中初始化可以直接传入当前 Fragment 实例,无需手动传 FragmentManager 和 Lifecycle:
// 对应Adapter新增一个构造方法即可 ViewPagerAdapter(Fragment fragment){ super(fragment); this.fragments = new ArrayList<>(); this.titles = new ArrayList<>(); } // 初始化调用 ViewPagerAdapter adapter = new ViewPagerAdapter(this);
内容的提问来源于stack exchange,提问作者dev.darron
相关产品推荐
相关产品推荐

