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

