onActivityResult 在 DialogFragments 中被弃用,但在 Activity 中没有

onActivityResult is deprecated in DialogFragments but not in Activity

在 activity 中此方法仍然有效,但当我在 Dialog Fragments 中调用它时,它已被弃用。

在 DialogFragment 中

在Activity

编辑:我使用 Matisse 库加载图像,它喜欢

图书馆link:https://github.com/zhihu/Matisse

 Matisse.from(getActivity())
                        .choose(MimeType.ofImage())
                        .countable(true)
                        .maxSelectable(9)
                        .addFilter(new GifSizeFilter(320, 320, 5 * Filter.K * Filter.K))
                        .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
                        .thumbnailScale(0.85f)
                        .imageEngine(new GlideEngine())
                        .showPreview(false) // Default is `true`
                        .forResult(REQUEST_CODE_AVATAR);

如何为这个库使用 ActivityResultLaucher?

向我解释为什么以及如何解决它?请

祝大家有个愉快的一天!

首先是结果 activity 已弃用。这是从 activity 获取结果的新方法。您应该能够对对话片段执行类似的操作。它被弃用的原因是当内存不足时,非活动活动通常会随结果一起删除,这会导致错误。

// You can do the assignment inside onAttach or onCreate, i.e, before the activity is displayed
    ActivityResultLauncher<Intent> someActivityResultLauncher = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            new ActivityResultCallback<ActivityResult>() {
                @Override
                public void onActivityResult(ActivityResult result) {
                    if (result.getResultCode() == Activity.RESULT_OK) {
                        // There are no request codes
                        Intent data = result.getData();
                        doSomeOperations();
                    }
                }
            });

    public void openSomeActivityForResult() {
        Intent intent = new Intent(this, SomeActivity.class);
        someActivityResultLauncher.launch(intent);
    }