我正在编写一个有两个活动的应用程序,当用户按下第二个活动的后退按钮时,会弹出一个对话框,要求用户确认操作。那么我该如何拦截呢?我非常怀疑这个问题,后台堆栈是操作系统本身的一部分。有没有人找到解决方法?
答案 0 :(得分:50)
在活动中,您可以覆盖
onBackPressed()
编辑:这是api lvl 5+:/ for 4及以下你必须覆盖onKeyDown()
答案 1 :(得分:11)
只需覆盖活动中的onKeyDown方法,然后查找后退按钮。返回true以便消耗该事件。
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//Do something here
return true;
}
return super.onKeyDown(keyCode, event);
}
答案 2 :(得分:5)
正如schwiz指出的那样,您需要覆盖活动类中的onBackPressed()
方法(http://developer.android.com/reference/android/app/Activity.html#onBackPressed())。
我只是想补充一点,如果您确实希望在某个阶段继续或访问标准后退操作(在显示对话框之后),那么您只需致电super.onBackPressed()
或ActivityName.super.onBackPressed()
来自活动的任何地方。
答案 3 :(得分:2)
通过the docs,如果可以,请不要使用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
}
...
}