拦截后退按钮

Rag*_*har 21 android function

我正在编写一个将有两个活动的应用程序,当用户按下第二个活动上的后退按钮时,会弹出一个对话框,要求用户确认操作.那么我该如何拦截呢?我非常怀疑这个问题,后台堆栈是操作系统本身的一部分.有没有人找到解决方法?

Nat*_*ann 50

在活动中,您可以覆盖

onBackPressed()

编辑:这是api lvl 5+:/ for 4及以下你必须覆盖onKeyDown()


sko*_*lis 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);
}
Run Code Online (Sandbox Code Playgroud)


Mac*_*ado 6

根据文档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
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)


The*_*eIT 5

正如schwiz指出的那样,您需要覆盖onBackPressed()活动类中的方法(http://developer.android.com/reference/android/app/Activity.html#onBackPressed()).

我只是想补充一点,如果你确实想要在某个阶段继续或访问标准的后退操作(在显示对话框之后),那么你只需要调用super.onBackPressed()ActivityName.super.onBackPressed()从Activity中的任何地方调用.