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

为何无法从Adapter类传递Intent?Item点击异常问题

解决Adapter中Item点击能触发Toast但无法传递Intent的问题

兄弟,太懂这种明明点击事件触发了,但核心功能卡壳的憋屈了——Toast能正常弹出来,说明你的点击逻辑绝对没问题,问题肯定出在Intent的配置或者启动Activity的细节上!我帮你梳理几个最容易踩的坑,你挨个排查试试:

  • 上下文(Context)用错了
    启动Activity必须用Activity类型的上下文,如果你的Adapter里用了getApplicationContext(),就会因为没有对应的任务栈导致Activity启动失败。最稳妥的方式是直接用itemView.getContext(),它返回的就是当前Item所在的Activity上下文,示例:

    // 错误示范:用Application Context启动
    // Intent intent = new Intent(getApplicationContext(), TargetActivity.class);
    
    // 正确示范:用ItemView的上下文
    Intent intent = new Intent(itemView.getContext(), TargetActivity.class);
    
  • 目标Activity没在Manifest注册
    这个低级但超容易忘!如果你的TargetActivity没在AndroidManifest.xml里声明,系统根本找不到它,自然启动不了。检查Manifest里有没有类似代码:

    <activity android:name=".TargetActivity"/>
    
  • Intent传递的数据不可序列化
    如果你往Intent里塞了自定义对象,但这个对象没实现Serializable或Parcelable接口,系统会悄悄抛出异常但不会直接崩溃(得去Logcat里找线索)。比如你要传一个User对象,得先让它实现序列化接口:

    public class User implements Serializable { // 或者Parcelable
        // 类内容
    }
    

    然后再正常传递:intent.putExtra("user_info", user);

  • 去Logcat里找真相
    别光盯着Toast,打开Logcat搜ActivityManager或者AndroidRuntime的日志,里面绝对有报错信息!比如“Unable to find explicit activity class”就是没注册Activity,“Not serializable”就是对象没序列化,这些日志能直接帮你定位问题。

最后给你一个完整的正确示例代码:

// Adapter中Item的点击事件处理
itemView.setOnClickListener(v -> {
    Toast.makeText(v.getContext(), "Item clicked!", Toast.LENGTH_SHORT).show();
    // 构造Intent并传递数据
    Intent intent = new Intent(v.getContext(), TargetActivity.class);
    intent.putExtra("item_id", 1001);
    // 启动Activity
    v.getContext().startActivity(intent);
});

内容的提问来源于stack exchange,提问作者Srinivas Nahak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:11:42