如何将数据从AppCompatDialog传递到AppCompatActivity及参数为空排查
问题修复方案
核心问题点
- Intent创建后未调用
startActivity():你构造了携带参数的Intent但没有执行跳转逻辑,第二个Activity根本没有通过这个Intent启动,自然拿不到参数。 - 参数类型不匹配:你最初在Intent中传入的是
Produkt类型的对象,但第二个Activity中尝试将其转换为ProduktVorrat类型,安全转换as?失败就会返回null。 - 跳转时机错误:你的需求是把Dialog中生成的
ProduktVorrat传递到第二个Activity,现在你在点击列表项时就构造Intent,此时还没有拿到Dialog生成的新数据,传参逻辑的位置完全不对。 - Dialog存在笔误:你在Dialog中获取商品数量时,错误读取了价格输入框的内容,会导致生成的
ProduktVorrat数据异常。
修复代码
第一个Activity(EinkaufslisteActivity)列表点击逻辑修改
adapter.setOnItemClickListener { val produkt = it // 删除原有的无效Intent构造代码,将跳转逻辑放到Dialog的确认回调中 EinkaufslisteProduktGekauftDialog(this, produkt, object : AddDialogListener{ override fun onAddButtonClicked(produkt: Produkt) { } override fun onAddButtonClickedVorrat(produktVorrat: ProduktVorrat) { viewModel.delete(produkt) // 拿到Dialog生成的ProduktVorrat后,再构造Intent跳转传参 Intent(this@EinkaufslisteActivity, VorratslisteActivity::class.java).also { intent -> intent.putExtra("EXTRA_PRODUKT", produktVorrat) startActivity(intent) } } }).show() }
Dialog参数获取逻辑修改
// 修正数量读取的笔误 val anzahl = etProduktGekauftAnzahl.text.toString()
额外注意事项
- 确保
ProduktVorrat类已经实现了Serializable或者Parcelable接口,否则Intent无法正常传递自定义对象,也会导致接收为null。 - 如果你的项目适配了Android 13及以上系统,推荐使用
intent.getSerializableExtra("EXTRA_PRODUKT", ProduktVorrat::class.java)的API获取参数,类型安全更高。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

