美文网首页
android 简单的使用onBackPressedCallba

android 简单的使用onBackPressedCallba

作者: yunhen | 来源:发表于2023-10-30 18:21 被阅读0次

使用的是 androidx.appcompat:appcompat:1.6.1里面的相关接口

在新版本上,原来的onBackPressed()标记过时了,需要使用onBackPressedCallback代替,
注意onBackPressedCallback不管android:enableOnBackInvokedCallback 这个属性的值,都会调用的

文档里的描述 :
如需支持预测性返回手势,您需要使用向后兼容的 OnBackPressedCallback AppCompat 1.6.0-alpha05 (AndroidX) 或更高版本的 API,或使用新的 OnBackInvokedCallback 平台 API。大多数应用将使用向后兼容的 AndroidX API。

此更新提供了一种迁移路径,用于正确拦截返回导航,包括将 KeyEvent.KEYCODE_BACK 和任何具有 onBackPressed 方法的类(例如 ActivityDialog)所涉及的返回拦截替换成新的系统 Back API。

我理解就是用OnBackPressedCallback就行,除非你的app不是AndroidX,就得用OnBackInvokedCallback

下面是简单的使用演示

private OnBackPressedCallback onBackPressedCallback = null;
    public interface OnMyBackPressedSupport{
        void onBackPresse();
    }

    private static class MyOnBackPressedCallback extends OnBackPressedCallback {

        private OnMyBackPressedSupport onBackPressedSupport = null;
        public MyOnBackPressedCallback(boolean enabled,OnMyBackPressedSupport onBackPressedSupport) {
            super(enabled);
            this.onBackPressedSupport = onBackPressedSupport;
        }

        @Override
        public void handleOnBackPressed() {
            if (onBackPressedSupport != null)
                onBackPressedSupport.onBackPresse();
        }
    }

    /**
     * 启用新返回手势
     */
    public boolean enableNewBackPressed = true;

    /**
     * 注意, 不能在回调里调用原来 系统函数 onBackPressed() ,会死循环
     * @param onBackPressedSupport
     */
    public void registerNewOnBackCallback(OnMyBackPressedSupport onBackPressedSupport){
        if (!enableNewBackPressed) return;
        if (onBackPressedCallback == null)
            onBackPressedCallback = new MyOnBackPressedCallback(true, onBackPressedSupport);
        onBackPressedCallback.remove();
        this.getOnBackPressedDispatcher().addCallback(this,onBackPressedCallback);


    }
    public void unregisterNewOnBackCallback(){
        if (!enableNewBackPressed) return;
        if (onBackPressedCallback != null)
            onBackPressedCallback.remove();
    }

相关文章

网友评论

      本文标题:android 简单的使用onBackPressedCallba

      本文链接:https://www.haomeiwen.com/subject/cqnbidtx.html