Android通过接口传递RecyclerView位置触发崩溃如何解决
问题根因
- 错误实例化Activity调用接口:你在Adapter的Camera点击事件中手动通过
new Appointment()创建的是全新的Activity实例,并非当前系统托管、正在前台运行的Appointment实例。这个新创建的Activity实例没有完成生命周期初始化,内部Context为空,调用Toast时无法获取资源就会触发空指针异常。 - Toast参数类型错误:
Toast.makeText方法的第二个参数如果传入int类型,系统会默认将其识别为字符串资源ID去匹配资源,你传入的是position数值,不存在对应的资源ID也会触发崩溃。
修复步骤
- 替换Adapter中Camera点击事件的回调逻辑,直接使用构造方法传入的接口实例调用,不需要新建Activity对象:
// 原错误代码 // Appointment obj = new Appointment(); // obj.On_Button_Cancel_Clicked(holder.getLayoutPosition()); // 替换为以下代码 onButtonClicked.On_Button_Cancel_Clicked(holder.getLayoutPosition());
- 修改主Activity中Toast的调用代码,将int类型的position转为字符串后再传入:
@Override public void On_Button_Cancel_Clicked(int position) { Toast.makeText(Appointment.this, String.valueOf(position), Toast.LENGTH_SHORT).show(); }
- 可选优化:建议接口方法名遵循Android开发小驼峰命名规范,可改为
onButtonCancelClicked提升代码可读性。
内容的提问来源于stack exchange,提问作者suhail zack
相关产品推荐
相关产品推荐

