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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:25:28