onBackPressed() 在我的 android 项目的任何活动中都没有被调用。而在我的其他项目中,它可以工作

onBackPressed() is not getting called in any activity in my android project. While in my other projects it works

提问人:Sunny 提问时间:11/14/2023 更新时间:11/17/2023 访问量:89

问:

赏金将在 3 天后到期。这个问题的答案有资格获得 +50 声望赏金。Sudhanshu Gaur正在寻找这个问题的最新答案

由于我在Android项目的多个活动中覆盖了方法,但它没有被调用,我的代码块如下所示:onBackPressed()

@Override
public void onBackPressed() {

    //my logics;
}

但是这个块没有被反压访问,它会进入以前的活动。

我已经搜索并找到人们使用 和 ,我不想使用它,因为在我正在使用的其他项目中,目标 sdk 版本都是相同的,并且效果很好。onKeyUponKeyDownonBackPressed()

我应该怎么做才能完成这项工作?,请帮我解决这个问题。

java 安卓

评论

2赞 ianhanniballake 11/14/2023
调用的应用是否通过 ?您应该遵循提供自定义后退导航指南,而不是根本不输入任何代码。onBackPressedandroid:enableOnBackInvokedCallback="true"AndroidManifest.xmlonBackPressed
0赞 Sunny 11/14/2023
嘿@ianhanniballake,我在这个项目中做的事情与我在其他项目中所做的一样。我没有使用 .看到这个后我尝试过,但这对我不起作用。AndroidManifest.xmlandroid:enableOnBackInvokedCallback="true"
0赞 David Weber 11/15/2023
你使用不同的Android版本吗?Android 代码在不同 API 版本之间并不总是向后兼容。
0赞 dev.bmax 11/16/2023
目标 SDK 版本是什么?
0赞 Chandresh 204 11/16/2023
我认为onBackPressed()现在已被弃用。你能试试这样的东西吗: onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { // 你的代码 } })

答:

0赞 theJango 11/17/2023 #1

虽然如果不看高级应用程序结构,就很难回答,但我仍然会尝试。

  1. 片段 - 如果您在活动托管的片段中覆盖而不调用,或者片段的处理方式可能会导致此问题。onBackPressed()super.onBackPressed()onBackPressed()
  2. 超级 - 确保调用所有重写的方法,以确保默认行为保持不变。super.onBackPressed()onBackPressed()

评论

0赞 David Wasser 11/17/2023
你关于总是打电话的说法很糟糕。(调用时将得到的)的默认行为是调用当前 .如果你想覆盖这个行为并做其他事情(显示一个对话框或启动一个不同的或其他什么),那么你绝对不想调用 super.onBackPressed()super.onBackPressed()onBackPressed()super.onBackPressed()finish()ActivityActivity
0赞 Sunny 11/17/2023
@Override public void onBackPressed() { //我的逻辑; } 这段代码只在活动中编写,我也在该块中使用了 super.onBackPressed()
2赞 Purple6666 11/20/2023 #2

on onBackPressed()对于更高的 Android 版本,已弃用。

请尝试使用 onBackPressedDispatcher。 在创建 activity/fragment 时添加回调,不要忘记传递生命周期所有者,否则不会调用回调,并在 activity/fragment 销毁时将其删除。 Kotlin 示例代码:

onBackPressedDispatcher.addCallback(owner = yourActivityOrFragment) {
    ... // your code
    finish()
}

评论

0赞 Rob 11/22/2023
OnBackPressed 已弃用,但如果 onBackPressedDispatcher 中没有添加启用的回调,则必须调用它,因此我假设已经定义了已知的回调,这就是为什么不调用已弃用的 onBackPressed 乐趣的原因
0赞 Rob 11/22/2023
您能否提供未调用 onBackPressed 的整个活动类@sunny?