Android Studio Kotlin Fragment多按钮跳转不同Activity问题求助
问题根源
- 最初使用的
android:onClick属性会优先查找按钮宿主Activity下的对应方法,Fragment中定义的同名方法不会被触发,这是只有第一个按钮配置属性后能正常跳转的原因。 - 把点击监听写在Activity中时出现闪退,是因为5个按钮都属于Fragment的布局,Activity初始化阶段Fragment还未完成布局加载,直接调用
findViewById找不到对应控件,会抛出空指针异常。 - 在Fragment中编写Intent时报错,是因为
Intent构造的第一个参数需要传入Context类型实例,你传入的this是Fragment本身,不属于Context类型,因此出现参数不匹配的错误。
解决方案
建议统一在Fragment中配置点击监听,移除XML中的android:onClick属性,避免出现上下文匹配问题,操作步骤如下:
- 删除
fragment_dashboard.xml中第一个Button节点下的android:onClick="next"配置,避免和后续监听冲突。 - 修正Fragment的
onCreateView代码,创建Intent时用requireContext()获取上下文,补全所有按钮的点击逻辑,完整代码如下:
override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // 加载Fragment布局 val view = inflater.inflate(R.layout.fragment_dashboard, container, false) // Chapter I 跳转逻辑 val button = view.findViewById<Button>(R.id.button) button.setOnClickListener{ val intent = Intent(requireContext(), ChapterIAct::class.java) startActivity(intent) } // Chapter II 跳转逻辑 val button2 = view.findViewById<Button>(R.id.button2) button2.setOnClickListener { val intent = Intent(requireContext(), ChapterIIAct::class.java) startActivity(intent) } // Chapter III 跳转逻辑 val button3 = view.findViewById<Button>(R.id.button3) button3.setOnClickListener { val intent = Intent(requireContext(), ChapterIIIAct::class.java) startActivity(intent) } // Chapter IV 跳转逻辑 val button4 = view.findViewById<Button>(R.id.button4) button4.setOnClickListener{ val intent = Intent(requireContext(), ChapterIVAct::class.java) startActivity(intent) } // Chapter V 跳转逻辑 val button5 = view.findViewById<Button>(R.id.button5) button5.setOnClickListener{ val intent = Intent(requireContext(), ChapterVAct::class.java) startActivity(intent) } return view }
内容的提问来源于stack exchange,提问作者Itsuki
相关产品推荐
相关产品推荐

