Android中SlideImagesAdapter构造方法传参不匹配问题求助
构造方法参数不匹配错误的原因及解决方法
错误原因
SlideImagesAdapter的构造函数第一个参数要求是android.content.Context类型,但在HomeFragment中你传入了this(即Fragment实例)。Fragment并不是Context的子类,编译器判定参数类型不匹配,因此抛出该错误。
解决方法
将传入的Fragment实例替换为Fragment关联的Context对象,Android Fragment提供了两种获取上下文的常用方式:
requireContext():返回非空的Context,若Fragment无可用上下文会直接抛出异常,安全性更高(推荐使用)getActivity():返回Fragment依附的Activity(属于Context子类),但可能返回null(比如Fragment未完成依附时)
修改代码示例
修复HomeFragment中的初始化代码
// 原错误代码 slideImagesAdapter = new SlideImagesAdapter(this, getListSlidePhoto()); // 修改后(推荐) slideImagesAdapter = new SlideImagesAdapter(requireContext(), getListSlidePhoto());
若需兼容场景或做非空判断,也可使用:
if (getActivity() != null) { slideImagesAdapter = new SlideImagesAdapter(getActivity(), getListSlidePhoto()); }
额外优化(避免内存泄漏风险)
在SlideImagesAdapter的instantiateItem方法中,可直接使用容器的上下文加载图片,避免存储的context引发潜在内存泄漏:
// 原代码 Glide.with(context).load(slidePhoto.getImgID()).into(imageView); // 修改后 Glide.with(container.getContext()).load(slidePhoto.getImgID()).into(imageView);
内容的提问来源于stack exchange,提问作者Khuong Viet Tai
相关产品推荐
相关产品推荐

