Kotlin Android开发中从Fragment启动Activity时Intent、finish()报错如何解决
问题修复方案
编译错误修复
1. Intent构造报错修复
Intent实例化的第一个参数要求传入Context类型对象,Fragment本身不属于Context子类,直接传this不符合参数要求。调用Fragment的requireContext()方法获取其附着的宿主上下文即可解决。
2. finish()方法报错修复
finish()是Activity专属方法,Fragment本身没有该方法。如果跳转后不需要保留宿主MainActivity,可调用requireActivity().finish()触发宿主销毁;正常场景下用户答完题返回需要回到科目列表页,直接删除finish()相关代码即可。
修复后的sendIntent函数代码
private fun sendIntent(passedVariable: Int) { val intent = Intent(requireContext(), SubjectPage::class.java) intent.putExtra("subject", passedVariable) startActivity(intent) // 如不需要关闭宿主页面可删除下行代码 // requireActivity().finish() }
隐藏运行异常修复
你当前的点击事件绑定存在逻辑错误:地理科目tvGeography的点击事件错误绑定到了英语科目的控件subjectOne上,会导致英语点击事件被覆盖、地理点击无响应,修正代码如下:
val subjectOne = binding.tvEnglish subjectOne.setOnClickListener { sendIntent(0) } val subjectTwo = binding.tvGeography // 原代码此处错写为subjectOne.setOnClickListener,已修正 subjectTwo.setOnClickListener { sendIntent(1) } val subjectThree = binding.tvHistory subjectThree.setOnClickListener{ sendIntent(2) }
内容的提问来源于stack exchange,提问作者Shikari
相关产品推荐
相关产品推荐

