Android应用点击RecyclerView条目崩溃 空指针异常问题排查
崩溃根因
你在MainAdapter中声明了全局变量Context context,但从未对该变量进行赋值,点击条目执行Toast.makeText()和跳转逻辑时,调用的是值为null的context对象,触发空指针崩溃,和日志里的报错信息完全匹配。
修复方法
选任意一种即可:
方法1:给全局context赋值
修改适配器构造方法,新增Context入参完成赋值:public MainAdapter(@NonNull FirebaseRecyclerOptions<MainModel> options, Context context) { super(options); // 给全局context赋值 this.context = context; }之后在Activity中初始化适配器时,传入当前页面的Context即可:
// 替换成你自己托管RecyclerView的Activity类名 MainAdapter adapter = new MainAdapter(options, MainActivity.this);方法2:直接从条目View获取Context(更推荐,无赋值遗漏风险)
不需要依赖全局context变量,直接在点击事件里从被点击的View上取Context即可,还可以删掉你之前声明的全局Context context;变量:@Override public void onClick(View view) { int position = getAbsoluteAdapterPosition(); // 从当前点击的View直接获取可用Context Context validContext = view.getContext(); Toast.makeText(validContext, "position"+position, Toast.LENGTH_SHORT).show(); Intent intent = new Intent(validContext, TradingviewActivity.class); validContext.startActivity(intent); }
补充说明
如果后续你要给列表里的CircleImageView加载图片,同样可以通过holder.itemView.getContext()拿到合法的Context给Glide用,不需要额外持有全局Context,能避免很多内存泄漏或者空指针问题。
内容的提问来源于stack exchange,提问作者Chanuka Jayamal
相关产品推荐
相关产品推荐

