Android自定义RecyclerView Adapter中getContext方法无法解析如何解决
问题根因
你遇到的报错是因为RecyclerView.Adapter类本身没有内置getContext()方法,你直接在自定义Adapter中调用这个不存在的方法,IDE自然会提示找不到方法的错误。
解决方案
以下提供两种可行的修复方式,可根据你的需求选择:
方案1:给Adapter增加Context成员变量(推荐,适配后续多场景Context需求)
你注释掉的context.getString(R.string.near_the)逻辑后续如果要启用,用这个方案更方便,不需要再额外处理Context获取逻辑:
- 首先在myAdapter类中新增全局Context变量:
public class myAdapter extends RecyclerView.Adapter<myAdapter.myViewHolder>{ ArrayList<DataModel> dataModels; // 新增此行,存储上下文 private Context mContext; private static final String LOCATION_SEPARATOR = " of "; String primaryLocation,secondaryLocation; //...其他原有代码保持不变
- 修改构造方法,接收并保存Context参数:
public myAdapter(Context context, ArrayList<DataModel> dataModels) { this.mContext = context; this.dataModels = dataModels; }
- 修改
getMagnitudeColor方法的返回行,用mContext替代不存在的getContext():
return ContextCompat.getColor(mContext,magnitudeColorResourceId);
- 最后在你初始化Adapter的Activity/Fragment中,传入上下文即可:
// 把原本的初始化代码new myAdapter(dataList)改成下面的形式,传入当前页面的上下文 myAdapter adapter = new myAdapter(MainActivity.this, dataModelsList);
方案2:无需新增成员变量,直接传Context参数
如果不想改动Adapter的构造逻辑,也可以直接在调用方法时从ViewHolder的itemView获取Context传入:
- 修改
getMagnitudeColor的方法签名,新增Context入参:
// 方法新增Context参数 private int getMagnitudeColor(Context context, double magnitude) { int magnitudeColorResourceId; int magnitudeFloor = (int) Math.floor(magnitude); //...中间switch逻辑完全不变 // 返回行替换为传入的context return ContextCompat.getColor(context,magnitudeColorResourceId); }
- 修改
onBindViewHolder中调用该方法的代码,传入ViewHolder对应的上下文:
int magnitudeColor = getMagnitudeColor(holder.itemView.getContext(), dataModels.get(position).getMag());
内容的提问来源于stack exchange,提问作者Amit Kumar
相关产品推荐
相关产品推荐

