onActivityResult устарел в DialogFragments, но не в Activity

avatar
Lộc Trần Phước
9 августа 2021 в 02:04
283
1
1

в действии этот метод все еще работает, но когда я вызываю его во фрагментах диалога, он устарел.

во фрагменте диалога enter image description here

в действии enter image description here

Редактировать: я использую библиотеку Matisse для загрузки изображения, вроде

ссылка на библиотеку: 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 для этой библиотеки?

объясните мне, почему и как я могу это исправить? пожалуйста

Всем хорошего дня!

Источник
Jabal Logian
9 августа 2021 в 02:13
0

это coderhelper.com/questions/62671106/… решение?

Lộc Trần Phước
9 августа 2021 в 03:33
0

спасибо, но я просто редактирую свой вопрос, можете ли вы мне помочь в этом случае?

Ответы (1)

avatar
Drivers Sea
9 августа 2021 в 02:17
2

Во-первых, действия с результатами устарели. Это новый способ получения результатов от деятельности. Вы должны быть в состоянии сделать то же самое с фрагментом диалога. Причина, по которой он устарел, заключается в том, что при нехватке памяти неактивные действия часто удаляются вместе с результатом, что вызывает ошибки.

// 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);
    }
Lộc Trần Phước
9 августа 2021 в 03:32
0

я просто редактирую свой вопрос, можете ли вы помочь мне в этом случае, большое спасибо!