提问人:Sunny 提问时间:11/14/2023 更新时间:11/17/2023 访问量:89
onBackPressed() 在我的 android 项目的任何活动中都没有被调用。而在我的其他项目中,它可以工作
onBackPressed() is not getting called in any activity in my android project. While in my other projects it works
问:
由于我在Android项目的多个活动中覆盖了方法,但它没有被调用,我的代码块如下所示:onBackPressed()
@Override
public void onBackPressed() {
//my logics;
}
但是这个块没有被反压访问,它会进入以前的活动。
我已经搜索并找到人们使用 和 ,我不想使用它,因为在我正在使用的其他项目中,目标 sdk 版本都是相同的,并且效果很好。onKeyUp
onKeyDown
onBackPressed()
我应该怎么做才能完成这项工作?,请帮我解决这个问题。
答:
0赞
theJango
11/17/2023
#1
虽然如果不看高级应用程序结构,就很难回答,但我仍然会尝试。
- 片段 - 如果您在活动托管的片段中覆盖而不调用,或者片段的处理方式可能会导致此问题。
onBackPressed()
super.onBackPressed()
onBackPressed()
- 超级 - 确保调用所有重写的方法,以确保默认行为保持不变。
super.onBackPressed()
onBackPressed()
评论
0赞
David Wasser
11/17/2023
你关于总是打电话的说法很糟糕。(调用时将得到的)的默认行为是调用当前 .如果你想覆盖这个行为并做其他事情(显示一个对话框或启动一个不同的或其他什么),那么你绝对不想调用 super.onBackPressed()
!super.onBackPressed()
onBackPressed()
super.onBackPressed()
finish()
Activity
Activity
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?
评论
onBackPressed
android:enableOnBackInvokedCallback="true"
AndroidManifest.xml
onBackPressed
AndroidManifest.xml
android:enableOnBackInvokedCallback="true"