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

Android Studio中Button点击监听失效 无法跳转至第二个Activity

问题排查及解决方案

1 优先检查AndroidManifest.xml配置

  • 确认MainActivity2已经在AndroidManifest.xml中注册,未注册跳转时会抛出ActivityNotFoundException,可能出现闪退或无响应情况。注册示例如下:
<activity
    android:name=".MainActivity2"
    android:exported="false" />

如果你的应用目标版本为Android 12及以上,仅当MainActivity2需要被外部应用调用时才设置android:exported="true",内部跳转默认设为false即可。

2 检查按钮点击事件触发状态

  • 代码中已添加Log.d("clicked","clicked")日志,触发按钮点击后查看Logcat是否有对应日志输出:
    • 无日志输出:说明点击事件绑定失败,检查布局文件中button的id是否和binding.button对应,是否存在其他控件遮挡按钮导致点击无响应。
    • 有日志输出:说明事件触发正常,问题出在跳转逻辑或目标Activity本身。

3 修复DataBinding误用问题

当前代码的核心错误是在onResume中重复初始化DataBinding实例,导致内存中存在两个不同的binding对象,可能引发数据异常甚至跳转逻辑失效:

  • 将binding定义为MainActivity的全局变量,不要在onCreate和onResume中各自初始化局部binding实例,修改后代码如下:
class MainActivity : AppCompatActivity() {
    // 全局声明binding
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 仅在onCreate中初始化一次
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
        // 绑定lifecycleOwner,避免DataBinding数据不更新
        binding.lifecycleOwner = this

        val button = binding.button
        button.setOnClickListener {
            // 增加输入校验,避免输入为空时toDouble抛异常崩溃
            val val1Str = binding.val1.text.toString()
            val val2Str = binding.val2.text.toString()
            if(val1Str.isEmpty() || val2Str.isEmpty()) {
                Toast.makeText(this,"请输入两个数值",Toast.LENGTH_SHORT).show()
                return@setOnClickListener
            }
            val val1 = val1Str.toDouble()
            val val2 = val2Str.toDouble()
            val r = val1 + val2

            binding.valeur1 = val1
            binding.valeur2 = val2
            binding.resultat = r

            val myBundle = Bundle()
            myBundle.putDouble("val1",val1)
            myBundle.putDouble("val2",val2)
            myBundle.putDouble("result",r)
            Log.d("clicked","clicked")
            val myIntent = Intent(this,MainActivity2::class.java)
            myIntent.putExtras(myBundle)
            startActivity(myIntent)
        }
    }

    override fun onResume() {
        super.onResume()
        // 直接使用全局binding,无需重复初始化
        binding.valeur1?.let { valeur1 ->
            binding.val1.setText(valeur1.toString())
            binding.val2.setText(binding.valeur2.toString())
            val txt = binding.resultat.toString()
            binding.textView2.text = "La somme est $txt"
        }
    }
}

4 排查崩溃日志

如果点击后应用闪退,直接查看Logcat中的崩溃栈信息:

  • 如果报类型转换异常:说明输入内容不是合法的Double类型,添加上文代码中的输入校验即可解决。
  • 如果报ActivityNotFoundException:对应前文Manifest未注册的问题,补充注册即可。

内容的提问来源于stack exchange,提问作者yahyaBdd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:15:02