Принудительно исправить вызов метода onActivityResult - Android - PullRequest
0 голосов
/ 29 мая 2018

У меня есть фрагмент, который загружает DialogFragment.Загруженный DialogFragment представляет собой всплывающий стиль, который позволяет пользователю выбрать фотографию или сделать ее со своей камеры.У меня есть метод onActivityResult в моем классе DialogFragment, который я хочу вызывать, когда они сделали фотографию или выбрали ее из галереи.

Проблема в том, что у меня также есть onActivityResult в родительском фрагменте.Я добавил его, чтобы я мог установить целевой фрагмент при создании диалога, а затем получить обратный вызов при закрытии диалога, чтобы я знал, что нужно выполнять дополнительные действия.

Я использую это для отображения DialogFragment из моего основного фрагмента...

DialogFragment profilePhotoChoose = new ProfilePhotoChoose();
profilePhotoChoose.setShowsDialog(true);
profilePhotoChoose.setCancelable(false);
profilePhotoChoose.setTargetFragment(MyMainFragment.this, REQUEST_CODE); // request code is simply int value
profilePhotoChoose.show(getActivity().getSupportFragmentManager(), "dialogPhotoChoose");

В результате запускается метод onActivityResult основного фрагмента вместо onActivityResult диалогового фрагмента.

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

ОБНОВЛЕНИЕ

Вот код, который я использую для запуска намерения камеры из DialogFragment,Обратите внимание, я использую поддержку DialogFragment.

Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                if(pictureIntent.resolveActivity(getActivity().getPackageManager()) != null){
                    try {
                        File file = .... // file stuff here
                        if (file != null) {
                            Uri photoURI = FileProvider.getUriForFile(getActivity(),"com.MYAPPID.android.provider", file);
                            pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
                            startActivityForResult(pictureIntent, REQUEST_CAPTURE_IMAGE);
                        }
                    } catch (Exception ex) {

                    }
                }

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Когда событие получено сначала в Деятельности , вам необходимо перенаправить его на ваш Фрагмент , поэтому в вашей Активности :

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    super.onActivityResult(requestCode, resultCode, data);
    Fragment yourChildFragment = getSupportFragmentManager().findFragmentByTag("YOUR_TAG");
    yourChildFragment.onActivityResult(requestCode, resultCode, data);
}

Это должно вызвать ваш Фрагмент onActivityResult.Если вы хотите переадресовать его на определенный звонок, вы можете попробовать добавить проверку requestCode.

0 голосов
/ 29 мая 2018

Вам не нужно использовать onActivityResult () в DialogFragment, вместо этого вы можете проверить код запроса в основном фрагменте метода onActivityResult (), такого как Start. Вы намерены сделать это следующим образом:

startActivityForResult(intent, REQUEST_CODE);

и в onActivityResult ()проверка метода для кода запроса:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check which request we're responding to
    if (requestCode == PICK_CONTACT_REQUEST) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            // The user picked a contact.
            // The Intent's data Uri identifies which contact was selected.

            // Do something with the contact here (bigger example below)
        }
    }
}
...