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

Fragment中创建CustomAdapter报Not an enclosing class错误求助

搞定 "Not an enclosing class" 错误

嘿,我一眼就看到你代码里的问题啦!咱们一步步来解决:

首先看你在ThirdYearFragment的onCreateView里写的这行代码:

CustomAdapter adapter = new CustomAdapter(SecondYearFragment.this, sub);

这行代码犯了两个小错误,导致编译器抛出"Not an enclosing class"的报错:

错误1:引用了错误的Fragment实例

你现在是在ThirdYearFragment类里写代码,却硬要拿SecondYearFragment.this当上下文——SecondYearFragment和当前类没有嵌套关系,编译器自然找不到它的"包围类",所以报错。

错误2:Fragment不能直接用this作为Context

Fragment本身并不是Context的子类,哪怕你改成ThirdYearFragment.this,也会因为类型不匹配出问题。你得用Fragment提供的方法来获取合法的上下文:

  • 推荐用requireContext():它会检查上下文是否存在,避免空指针异常;
  • 也可以用getActivity():获取Fragment关联的Activity上下文,但要注意Activity可能已经销毁的情况。

修复后的代码

把那行错误的代码改成:

CustomAdapter adapter = new CustomAdapter(requireContext(), sub);

另外,我还发现一个小疏漏:你在获取ListView时用的是R.id.listviewsecond,但你的fragment_third_year.xml里的ListView id明明是listviewthird,这个也得改,不然运行时会空指针:

ListView listView = view.findViewById(R.id.listviewthird);

额外优化建议

你的CustomAdapter构造方法可以补全父类的参数,这样使用起来更规范:

public CustomAdapter(@NonNull Context context, String[] subjects) {
    super(context, R.layout.sec_year_dept, subjects); // 添加上subjects参数给父类
    this.subjects = subjects;
    this.mContext = context;
}

这样改完,你的错误应该就能彻底解决啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:19:59