RecyclerView适配器中调用Intent崩溃,点击CardView无法跳转至目标页面
问题排查与解决
1. Context 为空或类型不匹配
崩溃的核心原因大概率是context对象为空,或者使用了非Activity类型的Context(比如Application Context)。startActivity()调用时,若用Application Context必须添加FLAG_ACTIVITY_NEW_TASK标记,否则会直接崩溃;而用View关联的Context更可靠,能避免空指针问题。
修复代码:
holder.parentCard.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Context context = v.getContext(); Intent intent = new Intent(context, DetailedView.class); context.startActivity(intent); } });
2. 未在清单文件注册DetailedView
如果DetailedView没有在AndroidManifest.xml中注册,系统找不到目标Activity,启动时会直接崩溃。
检查并添加注册代码:
<activity android:name=".DetailedView" />
3. 避免重复绑定点击事件
每次onBindViewHolder执行都会给CardView设置新的监听器,虽不会直接崩溃,但可能引发逻辑混乱。建议把点击事件移到ViewHolder构造方法中,一次性绑定:
public class YourViewHolder extends RecyclerView.ViewHolder { CardView parentCard; public YourViewHolder(@NonNull View itemView) { super(itemView); parentCard = itemView.findViewById(R.id.parent_card); parentCard.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int position = getAdapterPosition(); // 避免RecyclerView复用导致的位置无效问题 if (position != RecyclerView.NO_POSITION) { Context context = v.getContext(); Intent intent = new Intent(context, DetailedView.class); context.startActivity(intent); } } }); } }
4. 确保CardView可被点击
检查布局文件中CardView的属性,若设置了android:clickable="false"或被上层View拦截点击,会导致事件无法触发。可添加以下属性:
android:clickable="true" android:focusable="true"
内容的提问来源于stack exchange,提问作者ALFAS B
相关产品推荐
相关产品推荐

