我正在编写一个应用程序,它将有两个活动,当用户在第二个活动上按下返回按钮时,应该弹出一个对话框询问用户确认该操作。那么我该如何拦截?我对此表示怀疑,因为后退栈是操作系统本身的一部分。有人找到了解决方法吗?
在一个活动中,你可以覆盖重写
onBackPressed()
编辑:这是API级别5+的要求。对于4及以下的版本,你需要覆盖重写onKeyDown()。
onBackPressedDispatcher
。 - Peter Bruins在您的活动中简单地覆盖 onKeyDown(int, KeyEvent)
方法并查找后退按钮。返回 true
以消耗此事件。
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//Do something here
return true;
}
return super.onKeyDown(keyCode, event);
}
根据文档,如果可以的话,请不要使用 onBackPressed
。现在推荐使用 onBackPressedDispatcher.addCallback(this) {}
。这是一个片段示例:
class MyFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// This callback will only be called when MyFragment is at least Started.
val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
// Handle the back button event
}
// The callback can be enabled or disabled here or in the lambda
}
...
}
正如schwiz所指出的,您需要在活动类中覆盖onBackPressed()
方法(http://developer.android.com/reference/android/app/Activity.html#onBackPressed())。
我只想补充一点,如果您想在某个阶段继续或访问标准的后退操作(例如,在显示对话框之后),则可以从活动中的任何位置调用super.onBackPressed()
或ActivityName.super.onBackPressed()
。