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
相关产品推荐
相关产品推荐

