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

RecyclerView Item TextView背景色循环设置空指针报错求助

RecyclerView Item背景色循环设置的空指针问题排查

嘿,这个空指针问题我之前也踩过坑!你遇到的java.lang.NullPointerException本质是调用ContextCompat.getColor()时传入的Context对象为null——简单说就是你拿了一个无效的上下文去获取颜色资源。

问题根源

RecyclerView适配器如果没有正确持有有效的Context引用,就会触发这个错误。比如你可能没通过构造方法传入Context,而是尝试从某个未初始化的地方获取;或者在ViewHolder里调用itemView.getContext()时,视图还没被正确附加到窗口上(这种情况虽少见,但确实可能发生)。

解决步骤&完整示例代码

我整理了一个靠谱的实现方案,既解决空指针问题,又能实现每5个Item循环5种颜色的需求:

public class AdapterHumeurs extends RecyclerView.Adapter<AdapterHumeurs.ViewHolder> {

    private final Context mContext;
    private final List<YourDataModel> mHumeurList;
    // 提前定义好要循环的5种颜色资源ID
    private final int[] mCycleColors = {
            R.color.humeur_color_1,
            R.color.humeur_color_2,
            R.color.humeur_color_3,
            R.color.humeur_color_4,
            R.color.humeur_color_5
    };

    // 构造方法必须传入Context和数据列表,确保Context有效
    public AdapterHumeurs(Context context, List<YourDataModel> humeurList) {
        mContext = context;
        mHumeurList = humeurList;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // 用持有的mContext加载布局,避免null风险
        View itemView = LayoutInflater.from(mContext)
                .inflate(R.layout.item_humeur, parent, false);
        return new ViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        YourDataModel currentItem = mHumeurList.get(position);
        // 设置TextView的文本内容
        holder.tvHumeur.setText(currentItem.getContent());

        // 计算当前Item对应的颜色索引:position对5取余,实现每5个循环
        int colorIndex = position % 5;
        // 用有效的mContext获取颜色
        int bgColor = ContextCompat.getColor(mContext, mCycleColors[colorIndex]);
        // 给TextView设置背景色
        holder.tvHumeur.setBackgroundColor(bgColor);
    }

    @Override
    public int getItemCount() {
        return mHumeurList.size();
    }

    // ViewHolder内部类,只负责绑定视图控件
    static class ViewHolder extends RecyclerView.ViewHolder {
        TextView tvHumeur;

        ViewHolder(@NonNull View itemView) {
            super(itemView);
            tvHumeur = itemView.findViewById(R.id.tv_humeur);
        }
    }
}

额外注意点

  • 替换代码里的YourDataModel为你实际的数据模型类,R.layout.item_humeur和R.id.tv_humeur替换成你自己的布局和控件ID
  • 确保mCycleColors里的颜色资源已经在colors.xml里定义好,避免资源找不到的问题
  • 初始化适配器时,一定要传入有效的Context(比如Activity的this或者Fragment的requireContext()),绝对不能传null

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:31:59