fragment being destroyed when i select image from gallary or camera only first time

Viewed 68

i have a fragment and from fragment need to upload images ,when pick image from gallery or camera fragment is destroying and host activity also destroying, and from second time onwards working perfectly.

please suggest me some solutions..

thanks in advance..

    in the fragment class used these methods to call camera/gallery intents  

    private void takePhoto() {
            Dexter.withActivity(getActivity())
                    .withPermissions(Manifest.permission.CAMERA)
                    .withListener(new MultiplePermissionsListener() {
                        @Override
                        public void onPermissionsChecked(MultiplePermissionsReport report) {
                            if (report.areAllPermissionsGranted()) {
                              /*Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                                startActivityForResult(intent,PICK_FROM_CAMERA);*/
                                dispatchTakePictureIntent();

                            }
                        }

                        @Override
                        public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
                            token.continuePermissionRequest();
                        }
                    }).check();
        }

        private void openGallery() {
            Dexter.withActivity(getActivity())
                    .withPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    .withListener(new MultiplePermissionsListener() {
                        @Override
                        public void onPermissionsChecked(MultiplePermissionsReport report) {
                            if (report.areAllPermissionsGranted()) {
                                Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                                startActivityForResult(galleryIntent, PICK_FROM_GALLERY);

                            }
                        }

                        @Override
                        public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
                            token.continuePermissionRequest();
                        }
                    }).check();
        }


    very first time this method is not being called

        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            Log.e("makePayment", "onActivityResult");

            if (resultCode != Activity.RESULT_OK)
                return;
            if (data == null)
                return;
            if (requestCode == PICK_FROM_GALLERY) {
                Log.e("makePayment", "PICK_FROM_GALLERY");
                Uri contentURI = data.getData();
                try {
                    Bitmap bitmap = MediaStore.Images.Media.getBitmap(Objects.requireNonNull(getActivity()).getContentResolver(), contentURI);
                    if (isFromFront) {
                        pathFront = saveImage(bitmap);
                        mImageFileFront = new File(pathFront);
                        tvFront.setText(pathFront);
                        frontSide.setClipToOutline(true);
                        frontSide.setImageBitmap(bitmap);
                    } else {
                        pathBack = saveImage(bitmap);
                        mImageFileBack = new File(pathBack);
                        tvBack.setText(pathBack);
                        backSide.setClipToOutline(true);
                        backSide.setImageBitmap(bitmap);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                    Toast.makeText(getActivity(), "Failed!", Toast.LENGTH_SHORT).show();
                }

            } else if (requestCode == PICK_FROM_CAMERA) {
                try {
                    Log.e("makePayment", "PICK_FROM_CAMERA");
                    //Bitmap thumbnail = (Bitmap) data.getExtras().get("data");

                    bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), photoURI);
                    if (isFromFront) {
                        frontSide.setClipToOutline(true);
                        frontSide.setImageBitmap(BitmapFactory.decodeFile(pathFront));
                    } else {
                        backSide.setClipToOutline(true);
                        backSide.setImageBitmap(BitmapFactory.decodeFile(pathBack));
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }

    fragment onSaveInstanceState implemented to store the instance

      public void onSaveInstanceState(@NonNull Bundle outState) {
       super.onSaveInstanceState(outState);
       outState.putString("pathFront", pathFront);
        }

     fragment on View State Restored implemented to restore the instance

        @Override
        public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
        super.onViewStateRestored(savedInstanceState);
            if (savedInstanceState != null) {
                if (savedInstanceState.containsKey("pathFront")) {
                    pathFront = savedInstanceState.getString("pathFront");

                }
            }



        } 


    in activity implemented on Activity Result and saved instance state methods but not working

     @Override
        protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data){
            super.onActivityResult(requestCode, resultCode, data);
            List<Fragment> fragments = getSupportFragmentManager().getFragments();
            for (Fragment fragment : fragments) {
                if (fragment instanceof MakePayment) {
                    fragment.onActivityResult(requestCode, resultCode, data);
                }
            }
        }

in activity implemented on Activity Result and saved instance state methods but not working

  saved instance state to save the instance of fragment

        @Override
        protected void onSaveInstanceState(Bundle outState) {
            if (mCurrentPhotoPath != null) {
                outState.putString(CAPTURED_PHOTO_PATH_KEY, mCurrentPhotoPath);
            }
            if (mCapturedImageURI != null) {
                outState.putString(CAPTURED_PHOTO_URI_KEY, mCapturedImageURI.toString());
            }
            this.getSupportFragmentManager().putFragment(outState, "myFragment", fragment);
            super.onSaveInstanceState(outState);

        }

    onRestoreInstanceState to restore the saved instance of fragment

        @Override
        protected void onRestoreInstanceState(Bundle savedInstanceState) {
            if (savedInstanceState.containsKey(CAPTURED_PHOTO_PATH_KEY)) {
                mCurrentPhotoPath = savedInstanceState.getString(CAPTURED_PHOTO_PATH_KEY);
            }
            if (savedInstanceState.containsKey(CAPTURED_PHOTO_URI_KEY)) {
                mCapturedImageURI = Uri.parse(savedInstanceState.getString(CAPTURED_PHOTO_URI_KEY));
            }
            fragment = getSupportFragmentManager().getFragment(savedInstanceState,"myFragment");
            super.onRestoreInstanceState(savedInstanceState);

        }
0 Answers
Related