(Android) Fragment 에서 getActivity().startActivityForResult로 Activity로 값전달하기


A라는 엑티비티 위에 B라는 프레그먼트를 올렸습니다.

B라는 프레그먼트에서

getActivity().startActivityForResult()를 사용해

B(fragment)->A(activity)->B(fragment)로 값을 다시 받아옵니다.

여기서 문제가 발생하는데요 A엑티비티에서 int requestCode, int resultCode, Intent data 라는 3개의 인자를 받아오는데

로그를 찍어보면 request코드에는 값이 잘들어가지만 Intent에는 null 값이 들어갑니다.

왜이런지와 data를 받아올수있는 해결방안좀 알려주시면 정말 감사드리겠습니다.

고수님들 부탁드리겠습니다. 밑에는 예시코드입니다.

B fragment

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //사진인테트 호출
                    if (takePictureIntent.resolveActivity(activity.getPackageManager()) != null) {
                        File photoFile = null;
                        try {
                            photoFile = createImageFile();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        if (photoFile != null) {
                            Uri providerURI = FileProvider.getUriForFile(getContext(), BuildConfig.APPLICATION_ID + ".fileprovider", photoFile); //프로바이드 생성
                            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, providerURI); //사진저장경로 불러옴

                            getActivity().startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); //엑티비티 사진저장
                        } else {
                            Toast.makeText(getContext(), "저장공간이 접근 불가능한 기기입니다.", Toast.LENGTH_SHORT).show();
                            return;
                        }
                    }

A activity

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    Log.v("resultCode",resultCode+"");
    Log.v("requsetCode",requestCode+"");
    Log.v("data",data+"");

    changeFragment(ReceptionTakePictureViewFragment.class);
}

A Activity에서 B Fragment의 providerURI를 받아오는게 목표입니다.

  • 2017년 12월 13일에 작성됨

조회수 110


Banner bitmango

1 답변


일단 제가 질문을 잘 이해한것인지는 모르겠습니다. 만약 제가 문제를 잘못이해한거라면 깃허브 주소좀 알려주세요

A activity

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

Log.v("resultCode",resultCode+"");
Log.v("requsetCode",requestCode+"");
Log.v("data",data+"");

changeFragment(ReceptionTakePictureViewFragment.class);
}

이 함수에서 data는 intent 객체입니다.

Uri providerURI = FileProvider.getUriForFile(getContext(), BuildConfig.APPLICATION_ID + ".fileprovider", photoFile); //프로바이드 생성
                        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, providerURI); //사진저장경로 불러옴

                        getActivity().startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); //엑티비티 사진저장

이 부분을 보면 putExtra 함수로 인텐트내부에 데이터를 저장한것을 볼 수 있습니다. putExtra함수를 이용해서 값을 저장했다면 getTypeExtra를 사용하실 수 있습니다. Uri가 어떤 형태로 저장되는지 모르겠지만

 String key = data.getStringExtra(MediaStore.EXTRA_OUTPUT);
//putExtra로 저장하는 값에 종류에 따라 getStringExtra, getIntExtra 함수를 사용할 수 있습니다.

일단 저렇게 코드를 추가하면 key라는 변수에 uri가 저장될 것입니다. String으로 저장된 값은 parse함수를 이용해서 바꿀수있습니다.

URI uri;
uri=URI.parse(key);

저도 막 안드로이드를 공부하고있는 학생이고 해시코드에서 많은 도움을 받는 학생입니다. 제가 틀렸을 수 있습니다. 부디 도움이 되셨으면 좋겠습니다.

  • 2017년 12월 22일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close