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

Android自定义RecyclerView Adapter中getContext方法无法解析如何解决

问题根因

你遇到的报错是因为RecyclerView.Adapter类本身没有内置getContext()方法,你直接在自定义Adapter中调用这个不存在的方法,IDE自然会提示找不到方法的错误。

解决方案

以下提供两种可行的修复方式,可根据你的需求选择:

方案1:给Adapter增加Context成员变量(推荐,适配后续多场景Context需求)

你注释掉的context.getString(R.string.near_the)逻辑后续如果要启用,用这个方案更方便,不需要再额外处理Context获取逻辑:

  1. 首先在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;
    //...其他原有代码保持不变
  1. 修改构造方法,接收并保存Context参数:
public myAdapter(Context context, ArrayList<DataModel> dataModels) {
    this.mContext = context;
    this.dataModels = dataModels;
}
  1. 修改getMagnitudeColor方法的返回行,用mContext替代不存在的getContext():
return ContextCompat.getColor(mContext,magnitudeColorResourceId);
  1. 最后在你初始化Adapter的Activity/Fragment中,传入上下文即可:
// 把原本的初始化代码new myAdapter(dataList)改成下面的形式,传入当前页面的上下文
myAdapter adapter = new myAdapter(MainActivity.this, dataModelsList);

方案2:无需新增成员变量,直接传Context参数

如果不想改动Adapter的构造逻辑,也可以直接在调用方法时从ViewHolder的itemView获取Context传入:

  1. 修改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);
}
  1. 修改onBindViewHolder中调用该方法的代码,传入ViewHolder对应的上下文:
int magnitudeColor = getMagnitudeColor(holder.itemView.getContext(), dataModels.get(position).getMag());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:15:00