代码之家  ›  专栏  ›  技术社区  ›  Ragunath Jawahar cephus

拦截后退按钮

  •  21
  • Ragunath Jawahar cephus  · 技术社区  · 14 年前

    我正在写一个有两个活动的应用程序,当用户按下第二个活动上的后退按钮时,会弹出一个对话框,要求用户确认操作。那我该怎么拦截呢?我很怀疑这一点,因为backback本身就是操作系统的一部分。有人找到解决办法了吗?

    3 回复  |  直到 14 年前
        1
  •  54
  •   Nathan Schwermann    14 年前

    onBackPressed()

    编辑:这是api等级5+:/4及以下的用户必须覆盖onKeyDown()

        2
  •  12
  •   Ragunath Jawahar cephus    4 年前

    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);
    }
    
        3
  •  5
  •   TheIT    7 年前

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

    我只想补充一点,如果您确实想在某个阶段继续或访问标准的back操作(比如说,显示一个对话框之后),那么您只需调用 super.onBackPressed() ActivityName.super.onBackPressed() 从活动的任何地方。

        4
  •  3
  •   Machado AviD    4 年前

    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
        }
        ...
    }