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

Android应用问题:按一次返回键关闭Activity_B并回到Activity_A

解决Activity_B需按两次返回键关闭的问题

你的核心问题其实是Activity_B被重复启动了两次——你已经发现OnDataLayout_Click触发两次、Activity_B.OnCreate()调用两次,这意味着任务栈里存在两个Activity_B实例:按第一次返回键只是关闭第二个Activity_B,再按一次才会关闭第一个并回到Activity_A。咱们一步步来解决:

第一步:修复点击事件重复触发的问题

点击事件触发两次通常有这几个常见原因,你可以逐一排查:

  • 布局文件重复设置点击监听:检查布局xml,是不是既给DataLayout设置了android:onClick="OnDataLayout_Click",又在代码里通过DataLayout.Click += OnDataLayout_Click绑定了一次?两种方式保留其一即可。
  • 嵌套布局的事件传递:如果DataLayout是某个父布局的子View,父View也设置了点击监听,可能导致事件被两次触发。可以给子View添加android:clickable="true",或者在父View的点击事件里返回true拦截事件传递。
  • 代码中重复注册监听:检查代码逻辑,是不是在OnCreate之外的生命周期方法(比如OnResume)里也注册了点击监听?每次页面Resume都绑定一次,就会导致多次触发。

第二步:规范返回键逻辑(修复重复启动后,这步可选但能让代码更整洁)

你当前写的OnBackPressed里调用了一堆Finish相关方法,其实完全没必要——base.OnBackPressed()本身就会完成关闭当前Activity并返回上一个页面的逻辑。正确的写法应该是:

public override void OnBackPressed()
{
    // 无特殊逻辑时,直接调用base方法即可
    base.OnBackPressed();
}

如果需要自定义逻辑(比如添加退出提示),也可以这样写:

public override void OnBackPressed()
{
    // 这里添加自定义逻辑,比如弹出确认退出对话框
    Finish(); // 关闭当前Activity,等同于base.OnBackPressed()的核心逻辑
}

验证修复效果

修复点击事件后,你可以在Activity_B.OnCreate()里添加日志输出,或者用adb命令查看当前任务栈:

adb shell dumpsys activity activities

如果栈里只有一个Activity_B实例,那按一次返回键就会直接回到Activity_A了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:15:11