You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin自定义Dialog点击按钮跳转Activity失效问题求助

解决自定义Dialog按钮跳转Activity无效的问题

问题原因

你的CustomDialog类并非Activity子类,无法直接调用startActivity()和finish()方法——这两个方法属于Context体系的API,必须通过有效的Context实例来触发。

修复方案

  1. 通过传入的Context实例启动Activity
  2. 若需要关闭当前页面,需将传入的Context安全强转为Activity类型后调用finish()
  3. 修正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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 09:05:28