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

Android中FragmentManager出现Cannot resolve method super()错误求助

解决FragmentStateAdapter中Cannot resolve method super()的问题

嘿,我来帮你梳理清楚问题根源和修复方案:

问题核心原因

你碰到的Cannot resolve method super()错误,本质是给FragmentStateAdapter的构造方法传错了参数类型。AndroidX里的FragmentStateAdapter并没有接收FragmentManager作为参数的构造方法,它的合法入参是FragmentActivity或者Fragment。你当前构造方法里传了FragmentManager,编译器找不到对应的父类构造方法,自然就报错了。

另外你的AuthenticationPagerAdapter还有几个冗余/错误的实现需要修正:

  • 同时写了旧版PagerAdapter的getItem()、getCount()和新版FragmentStateAdapter要求的createFragment()、getItemCount(),这会造成逻辑混淆
  • createFragment()和getItemCount()的实现是无效的(返回null和0),会导致ViewPager2无法正常加载碎片

修复后的完整代码

public class MainActivity extends FragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ViewPager2 viewPager = findViewById(R.id.viewPager);
        AuthenticationPagerAdapter pagerAdapter = new AuthenticationPagerAdapter(this); // 传入当前Activity实例
        pagerAdapter.addFragment(new fragment_login());
        pagerAdapter.addFragment(new fragment_register());
        viewPager.setAdapter(pagerAdapter);
    }

    public static class AuthenticationPagerAdapter extends FragmentStateAdapter {
        private final ArrayList<Fragment> fragmentList = new ArrayList<>();

        // 修正构造方法:接收FragmentActivity类型参数
        public AuthenticationPagerAdapter(FragmentActivity activity) {
            super(activity);
        }

        // 实现FragmentStateAdapter要求的createFragment方法
        @NonNull
        @Override
        public Fragment createFragment(int position) {
            return fragmentList.get(position);
        }

        // 实现FragmentStateAdapter要求的getItemCount方法
        @Override
        public int getItemCount() {
            return fragmentList.size();
        }

        void addFragment(Fragment fragment) {
            fragmentList.add(fragment);
        }
    }
}

关键修正点说明

  1. 构造方法参数调整:把AuthenticationPagerAdapter的构造参数从FragmentManager改成FragmentActivity,调用super(activity)就能匹配到父类的合法构造方法。在MainActivity初始化Adapter时,直接传this即可(因为MainActivity继承自FragmentActivity)。
  2. 移除冗余方法:删掉旧版PagerAdapter的getItem()和getCount(),FragmentStateAdapter只需要实现createFragment()和getItemCount()。
  3. 修正核心方法实现:让createFragment()返回对应位置的碎片,getItemCount()返回碎片列表的真实长度,保证ViewPager2能正确加载登录、注册碎片。

最后提个小规范建议:Java类名一般用大驼峰命名法,fragment_login和fragment_register建议改成LoginFragment和RegisterFragment,这样代码可读性会更好~

内容的提问来源于stack exchange,提问作者Novneet Patnaik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:27:59