안드로이드 개발을 하다모면 액티비티간 데이터를 주고받아야 하는 경우가 있습니다.
이런 경우 startActivityForResult() 와 onActivityResult()를 이용해 처리할 수 있습니다.

순서는 아래와  같습니다.
1. 액티비티 호출시 리퀘스트 코드를 추가한다.
2. 호출된 액티비티는  액션을 한 후 결과를 세팅하고 종료한다.
3. 기존 액티비티는 결과를 받아 처리한다.






 1. 액티비티 호출시 리퀘스트 코드를 추가한다
 
기본적으로는 액티비티를 호출할 때, startActivity() 메소드를 사용하지만,
이 경우에는 startActivityForResult() 메소드를 사용해야 합니다.

액티비티 A가 있다고 해봅니다.
액티비티 A는 intent에 데이터를 넣고, 액티비티 B를 호출할 것입니다.
이때, 액티비티 A는 자신이  호출한 액티비티 B에서 처리된 결과를 데이터로 받고 싶어 합니다.


처음에는 아래와 같이 Activity A 만 존재하고 있습니다.





이제 이 Activity A는 B를 호출합니다. 호출은 아래와 같이 이루어 집니다.
intent에 호출할 Activity B에 대한 정보와,  여러 데이터들을 담습니다.
 





Activity B가 호출 되면 아래와 같이 될것입니다.










 2. 호출된 액티비티는 액션을 한 후 결과를 세팅하고 종료한다
 
호출된 Activity B는 자신을 호출한 Activity A로 부터 받은 데이터를 가지고 무엇인가 자신의 일을 수행할 것입니다.
그리고 모든 수행을 마쳤다면, 아래와 같이 합니다.

결과로 돌려줄 데이터가 있다면, setResult(RESULT_OK, intent) 를 실행해 결과를 함께 넘겨주고,
결과는 주지 않고, 뭔가 수행했다는 신호정도만을 돌려줄땐, setResult(RESULT_OK) 를 실행합니다.

- 여기서는  RESULT_OK 를 넣었지만, 실제로 RESULT_CANCELED 와  RESULT_FIRST_USER 라는 플래그도 있습니다.
- 중요한건 프로그래머가 식별할 수 있는 플래그를 사용하면 되는 것입니다.

그리고 모든 처리가 끝났다면 Activity B는 자신을 finish() 하면 됩니다.
 









 3. 기존 액티비티는 결과를 받아 처리한다
 
Activity B는 자신을 종료시키면서 Activity A를 다시 화면위로 올려놓습니다.
그럼 Activity A에서는 자동으로 onActivityResult() 메소드가 호출됩니다. 

프로그래머는 Activity A에서 onActivityResult() 메소드를 override해서 자신이 되돌려 받은 결과로 처리하고 싶은 것을 구현하면 됩니다.




















Posted by croute

댓글을 달아 주세요

  1. 지멋대루 2011.05.26 23:06 신고  댓글주소  수정/삭제  댓글쓰기

    정말 쉽게 정리됐네요!~ 잘 이해하고 갑니다~

  2. 장미와나 2011.06.13 16:39 신고  댓글주소  수정/삭제  댓글쓰기

    또왔습니다. ^^; (_ _)
    몰랐던intent 정리 하고 갑니다.
    감사합니다.

  3. ch.eom 2011.07.28 14:11 신고  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 제대로 이해시켜주시네요!!

  4. 와 진짜 설명 지대로다...진짜임... 2011.12.30 14:26 신고  댓글주소  수정/삭제  댓글쓰기

    설명 완전 쉽고 이해 팍팍되게 잘해놓으셨습니다...

    이런것도 제주인데 부럽습니다.^^

  5. 베리굿 2012.10.23 17:03 신고  댓글주소  수정/삭제  댓글쓰기

    이정도 설명이라면 책한권 내셔도 되겠네요~! 감사합니다 ㅋ

  6. 이윤호 2013.03.02 00:44 신고  댓글주소  수정/삭제  댓글쓰기

    이건 완전 책보다 더 쉬운 설명인걸요 !

  7. BlogIcon 공부중 2013.03.14 00:45 신고  댓글주소  수정/삭제  댓글쓰기

    도움 받고 가요~~고맙습니다

  8. 잉여도스 2016.01.27 00:12 신고  댓글주소  수정/삭제  댓글쓰기

    재미있게 잘봤습니다.
    이해가 쏙쏙 되네요 ^^