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本身。
- 无日志输出:说明点击事件绑定失败,检查布局文件中button的id是否和
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
相关产品推荐
相关产品推荐

