app返回键监听

OnBackPressedDispatcher 在 androidx.activity 1.0.0 加入,旨在处理返回逻辑。您不仅可以获得在 Activity 之外处理返回键的便捷方式。 根据您的需要,您可以在任意位置定义 OnBackPressedCallback,使其可复用,或根据应用程序的架构进行任何操作。 您不再需要重写Activity 中的 onBackPressed() 方法,也不必提供自己的抽象来实现需求的代码。

ComponentActivity 是 FragmentActivity 和 AppCompatActivity 的基类,您可以通过使用其 OnBackPressedDispatcher(可以通过调用 getOnBackPressedDispatcher() )来控制返回按钮的行为。早在 Android 13 之前,官方已推荐使用 AndroidX 的 OnBackPressedDispatcher 来取代 onBackPressed() 
// 该方法官方已弃用
@Deprecated("Deprecated in Java")
override fun onBackPressed() {
    Log.d("xuan", "------onBackPressed")
    super.onBackPressed()
}

建议使用 AndroidX.ComponentActivity 的 onBackPressedDispatcher 进行监听,它会在 activity 生命周期 onStart() 后才可监听到,onDestroy() 时自动销毁。它在 onBackPressed() 方法后面执行。

在Activity中使用

this.onBackPressedDispatcher.addCallback(this,object :
    OnBackPressedCallback(true) {
        override fun handleOnBackPressed(){
            // 返回需要处理的事项
        }
    })

在Fragment中使用

getActivity().onBackPressedDispatcher.addCallback(getActivity(),object :
    OnBackPressedCallback(true) {
        override fun handleOnBackPressed(){
            // 返回需要处理的事项
        }
    })

为了兼容 13 之前的设备建议保留现有的 Back 逻辑。

OnBackPressedDispatcher 控制如何将返回按钮事件分配给一个或多个OnBackPressedCallback 对象。 OnBackPressedCallback 的构造函数将布尔值用于初始启用状态。 仅当启用了回调(即 isEnabled() 返回true)时,调度程序才会调用回调的handleOnBackPressed() 来处理返回按钮事件。 您可以通过调用 setEnabled() 来更改启用状态。

回调是通过 addCallback() 方法添加的。 强烈建议使用采用 LifecycleOwner 的addCallback() 方法。 这样可以确保仅在 LifecycleOwner 为 Lifecycle.State.STARTED 时才添加OnBackPressedCallback。 当关联的 LifecycleOwner 被销毁时,该 activity 会删除已注册的回调,以防止内存泄漏,并使其适用于寿命比该 activity 短的 fragment 或其他生命周期所有者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值