You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:45:03