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); } } }
关键修正点说明
- 构造方法参数调整:把
AuthenticationPagerAdapter的构造参数从FragmentManager改成FragmentActivity,调用super(activity)就能匹配到父类的合法构造方法。在MainActivity初始化Adapter时,直接传this即可(因为MainActivity继承自FragmentActivity)。 - 移除冗余方法:删掉旧版
PagerAdapter的getItem()和getCount(),FragmentStateAdapter只需要实现createFragment()和getItemCount()。 - 修正核心方法实现:让
createFragment()返回对应位置的碎片,getItemCount()返回碎片列表的真实长度,保证ViewPager2能正确加载登录、注册碎片。
最后提个小规范建议:Java类名一般用大驼峰命名法,fragment_login和fragment_register建议改成LoginFragment和RegisterFragment,这样代码可读性会更好~
内容的提问来源于stack exchange,提问作者Novneet Patnaik
相关产品推荐
相关产品推荐

