You need to enable JavaScript to run this app. Android自定义适配器的Yes/No弹窗如何传递数据到ListView并替换Toast提示
优惠活动
大模型
产品
解决方案
定价
更多

Android自定义适配器的Yes/No弹窗如何传递数据到ListView并替换Toast提示

空指针崩溃原因排查

你出现空指针的核心原因是:调用findViewById(R.id.lvIncomeCategories)的view是ListView的单条子项视图,而你要找的消息中心ListView是属于Activity布局的控件,不在子项view的视图树范围内,所以查找返回null,调用setAdapter时触发空指针。

实现方向指引

  • 采用接口回调实现适配器到Activity的通信,这是Android中适配器与宿主页交互的标准方案
    1. 在自定义适配器类内部定义一个回调接口,声明用于传递删除结果的方法,参数可包含删除成功状态、删除的分类ID/名称等你需要的信息
    2. 给适配器的构造方法新增该接口类型的入参,在Activity初始化适配器时,传入接口的实现实例
    3. 适配器内删除操作完成后,直接调用回调接口的方法,把删除结果数据回传给Activity
  • 消息中心ListView的更新逻辑统一放在Activity中处理
    1. 给消息中心ListView单独维护专属的数据列表和适配器,不要和数据列表的适配器混用
    2. 每次收到适配器回传的删除结果时,把对应的提示内容添加到消息列表中,调用消息适配器的notifyDataSetChanged()即可刷新展示,不需要每次都重新创建适配器、调用setAdapter
    3. 如果不需要单独的消息页面,可直接把消息中心ListView放在当前Activity的布局中,默认设为隐藏,收到新消息时显示,停留几秒后再自动隐藏,完全可以替代Toast的效果
  • 如果你需要跳转到专门的消息中心Activity展示结果
    直接在Activity收到回调结果后,调用startActivity,用Intent.putExtra把删除结果相关数据传递到消息Activity,在消息Activity的onCreate中通过getExtra拿到数据后,加载到消息列表中即可。

内容的提问来源于stack exchange,提问作者Shawn Mulligan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 05:15:04