마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Activity와 Fragment communication 질문입니다!!

0 추천
        AppData appData = new AppData(
                images[pos],
                images[pos],
                movieInfo,
                contentsData.get(pos).get("Synopsis"),
                contentsData.get(pos).get("Scenario"),
                countInfo,
                likeFlag[pos],
                bookFlag[pos]);

        Fragment fragment = null;
        for (int i = 0; i < size; i++) {
            if (pos == i) {
                fragment = new PagerFragment();
                Bundle bundle = new Bundle();
                bundle.putInt("listPosition", pos);
                bundle.putInt("listSize", size);
                bundle.putParcelable("appData", appData);
                fragment.setArguments(bundle);
                break;
            }
        }

메인 액티비티의 일부 소스인데요!! 메인 액티비티에 리스트뷰가 있고 리스트 아이템 클릭시 위소스가 속해있는 메소드로 들어가 AppData라는 parcelable객체 생성한 후  그 객체를 프래그먼트로 putParcelable해서 보내줍니다!!

예를 들어 프래그먼트에서 액티비티로 부터 받은 데이터를 바꿔주고 다시 액티비티로 돌아가면 바뀐데이터가 반영 되게 하고싶습니다!! 어떻게 해야할까요 ㅠㅠ

익명사용자 님이 2016년 9월 28일 질문
프레그먼트안에 통신에 필요한 인터페이스를 선언하시고 액티비티를 이 인터페이스를 구현하게 하시면 프레그먼트에서 이 인터페이스를 호출할 수 있겠죠?
이게 번거로우시면 EventBus같은 라이브러리의 도움을 받아 작업을 간소하게 처리할 수 있습니다.
프래그먼트가 종료할때 activity를 reflesh해주려고 하는데요 그렇다면 인터페이스를 어디서 호출을 해줘야할까요??
fragment도 activity와 유사한 life cycle을 가집니다. onCreate, onResume(), onPause, onStop, onDestory같은 event가 동일하게 존재하구요 onAttach, onCreateView, onActivityCreated, onDestroyView, onDetached등의 fragment만의 event가 존재합니다.
onAttach에서 listenr를 할당하고 pair가 되는 onDetach이벤트에서 해제하시면 됩니다. 따라서 fragement가 종료될 때 onDetach, onDestoryView, onDestory 등의 event 등이 가능하겠지만, screen rotating 등에도 동일한 event가 호출될 수 있으므로  그냥 interface를 통해 event 발생시점에 처리를 해주시는 것이 더 적합할 수도 있습니다. 특별한 이유가 있으시지 않다면요. 아래는 fragment의 lifecycle과 activity와의 communication에 대한 내용이니 시간내서 읽어보시길 바랍니다. 여기에 예제 코드까지 다 나옵니다.
https://developer.android.com/guide/components/fragments.html

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...