Android Activity onBackPressed废弃替代方案

java 复制代码
@Override
@MainThread
@CallSuper
@Deprecated
public void onBackPressed() {
    getOnBackPressedDispatcher().onBackPressed();
}

Activity中的onBackPressed方法在覆盖时,会提示已经废弃,下面是用新的方案替代

1、在manifest.xml中,设置enableOnBackInvokedCallback为true

XML 复制代码
<application
        android:enableOnBackInvokedCallback="true">

2、在Activity的onCreate方法添加以下代码,在handleOnBackPressed中实现对back的控制

java 复制代码
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getOnBackPressedDispatcher().addCallback(this, new androidx.activity.OnBackPressedCallback(true) {
        @Override
        public void handleOnBackPressed() {
            finish();
        }
    });
}

3、在DialogFragment中,针对android 13及以上需要特殊设置OnBackInvokedDispatcher

java 复制代码
    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        Window window = dialog.getWindow();
        if (window != null && android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) {
            // Get the dispatcher
            OnBackInvokedDispatcher dispatcher = window.getOnBackInvokedDispatcher();
            // Add a callback
            dispatcher.registerOnBackInvokedCallback(
                    OnBackInvokedDispatcher.PRIORITY_DEFAULT,
                    new OnBackInvokedCallback() {
                        @Override
                        public void onBackInvoked() {
                            // Handle the back button press here
                            // You can dismiss the dialog or do other things
                            backPressed();
                        }
                    }
            );
        }
        dialog.setOnKeyListener((dialog1, keyCode, event) -> event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK && backPressed());
        return dialog;
    }
相关推荐
alexhilton1 小时前
在Jetpack Compose中创建CRT屏幕效果
android·kotlin·android jetpack
2501_940094023 小时前
emu系列模拟器最新汉化版 安卓版 怀旧游戏模拟器全集附可运行游戏ROM
android·游戏·安卓·模拟器
下位子3 小时前
『OpenGL学习滤镜相机』- Day9: CameraX 基础集成
android·opengl
参宿四南河三5 小时前
Android Compose SideEffect(副作用)实例加倍详解
android·app
火柴就是我6 小时前
mmkv的 mmap 的理解
android
没有了遇见6 小时前
Android之直播宽高比和相机宽高比不支持后动态获取所支持的宽高比
android
shenshizhong7 小时前
揭开 kotlin 中协程的神秘面纱
android·kotlin
vivo高启强7 小时前
如何简单 hack agp 执行过程中的某个类
android
沐怡旸7 小时前
【底层机制】 Android ION内存分配器深度解析
android·面试
你听得到118 小时前
肝了半个月,我用 Flutter 写了个功能强大的图片编辑器,告别image_cropper
android·前端·flutter