Android自定义适配器的Yes/No弹窗如何传递数据到ListView并替换Toast提示
空指针崩溃原因排查
你出现空指针的核心原因是:调用findViewById(R.id.lvIncomeCategories)的view是ListView的单条子项视图,而你要找的消息中心ListView是属于Activity布局的控件,不在子项view的视图树范围内,所以查找返回null,调用setAdapter时触发空指针。
实现方向指引
- 采用接口回调实现适配器到Activity的通信,这是Android中适配器与宿主页交互的标准方案
- 在自定义适配器类内部定义一个回调接口,声明用于传递删除结果的方法,参数可包含删除成功状态、删除的分类ID/名称等你需要的信息
- 给适配器的构造方法新增该接口类型的入参,在Activity初始化适配器时,传入接口的实现实例
- 适配器内删除操作完成后,直接调用回调接口的方法,把删除结果数据回传给Activity
- 消息中心ListView的更新逻辑统一放在Activity中处理
- 给消息中心ListView单独维护专属的数据列表和适配器,不要和数据列表的适配器混用
- 每次收到适配器回传的删除结果时,把对应的提示内容添加到消息列表中,调用消息适配器的
notifyDataSetChanged()即可刷新展示,不需要每次都重新创建适配器、调用setAdapter - 如果不需要单独的消息页面,可直接把消息中心ListView放在当前Activity的布局中,默认设为隐藏,收到新消息时显示,停留几秒后再自动隐藏,完全可以替代Toast的效果
- 如果你需要跳转到专门的消息中心Activity展示结果
直接在Activity收到回调结果后,调用startActivity,用Intent.putExtra把删除结果相关数据传递到消息Activity,在消息Activity的onCreate中通过getExtra拿到数据后,加载到消息列表中即可。
内容的提问来源于stack exchange,提问作者Shawn Mulligan
相关产品推荐
相关产品推荐

