Android Kotlin自定义Dialog点击按钮跳转Activity失效问题求助
解决自定义Dialog按钮跳转Activity无效的问题
问题原因
你的CustomDialog类并非Activity子类,无法直接调用startActivity()和finish()方法——这两个方法属于Context体系的API,必须通过有效的Context实例来触发。
修复方案
- 通过传入的
Context实例启动Activity - 若需要关闭当前页面,需将传入的Context安全强转为Activity类型后调用
finish() - 修正MainActivity调用时的拼写错误
修改后的代码
custom_dialog.kt
class CustomDialog(context: Context) { private val dialog = Dialog(context) fun myDig(page: Context, result: String) { dialog.setContentView(R.layout.custom_dialog_find) val text = dialog.findViewById<TextView>(R.id.result_textview) val btn_yes = dialog.findViewById<Button>(R.id.yesButton) val btn_no = dialog.findViewById<Button>(R.id.noButton) text.text = "${result} is me" btn_yes.setOnClickListener { Toast.makeText(page, "Move to A Activity", Toast.LENGTH_SHORT).show() // 通过传入的Context启动目标Activity val intent = Intent(page, LoginActivity::class.java) page.startActivity(intent) // 安全判断后关闭当前Activity if (page is Activity) { page.finish() } dialog.dismiss() } btn_no.setOnClickListener { Toast.makeText(page, "Move to B Activity", Toast.LENGTH_SHORT).show() // 同理实现跳转B Activity val intent = Intent(page, BActivity::class.java) page.startActivity(intent) dialog.dismiss() } dialog.window!!.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT) dialog.setCanceledOnTouchOutside(true) dialog.setCancelable(true) dialog.show() } }
MainActivity.kt
val custom_dialog = CustomDialog(this@MainActivity) // 修正拼写错误:MainAcitivity → MainActivity custom_dialog.myDig(this@MainActivity, result)
注意事项
- 优先传入Activity类型的Context(比如
this@MainActivity),避免使用Application Context——若使用后者,启动Activity时必须添加Intent.FLAG_ACTIVITY_NEW_TASK标志,且无法直接调用finish()关闭页面。 - 强转Context为Activity时必须加类型判断,防止传入非Activity Context导致崩溃。
内容的提问来源于stack exchange,提问作者jyk
相关产品推荐
相关产品推荐

