Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

재훈재훈

FLAG_ACTIVITY_FORWARD_RESULT - 세번째 액티비티에서 첫번째 액티비티로 결과 전달하기 본문

Computer Engineering/Android

FLAG_ACTIVITY_FORWARD_RESULT - 세번째 액티비티에서 첫번째 액티비티로 결과 전달하기

jaehoonx2 2018. 4. 15. 18:39

API에서 FLAG_ACTIVITY_FORWARD_RESULT 를 찾아보면 이렇게 적혀있다.


FLAG_ACTIVITY_FORWARD_RESULT : int

If set and this intent is being used to launch a new activity from an existing one,

then the reply target of the existing activity will be transferred to the new activity.


응답 타겟을 기존 존재하는 액티비티에서 새로운 액티비티로 넘겨준다는 주는 플래그이다.

어떤 의미인지 다시 쉽게 풀어써보자.


액티비티 A, B, C 가 존재한다.

A에서 startActivityforResult를 통해 B를 불러오면 B는 A에 대해 응답 타겟을 갖고 있다.

그런데 지금 이 B (existing activity)에서 FLAG_ACTIVITY_FORWARD_RESULT 를 사용해서

새로운 액티비티 C를 만들 수 있다. 이 때 A에 대한 응답 타겟도 C로 같이 넘어간다.



StartActivityForResult()                                                // 원래대로라면

A에서 StartActivityForResult()로 B를 실행시켰다면,

B에서 setResult() 메소드를 통해 인텐트를 전달하고

A에서 onActivityResult()로 그 인텐트를 받는다.




FLAG_ACTIVITY_FORWARD_RESULT                                // 이 플래그를 사용한다면

A에서 B로는 넘어갈 때 StartActivityForResult()를 사용하고

B에서 C로 넘어갈 때는 이 플래그를 설정해주고 StartActivity()를 사용한다.(C에서 B로 돌아가지 않으니)

이렇게 되면 액티비티 A가 응답을 받고자 하는 대상을 B에서 C로 바꿀 수 있다.

즉 응답 타겟을 B에서 C로 넘기는 것이다.

그리고 최종적으로 C에서 setResult()를 호출하여 인텐트를 A로 보내고

A는 기존 onActivityResult() 메소드 그대로 사용하여 C에서 온 인텐트를 받을 수 있다.



다음은 FLAG_ACTIVITY_FORWARD_RESULT 를 사용했을 때 흐름이다.

Nav flow is: A => B => C => A with results from C
If you're using fragments please note that "onActivityResult" will be called according to where "startActivityForResult" is called (method "startActivityForResult" is available in both, activity and fragment)

ActivityA
   startActivityForResult(intentB, 22);

ActivityB
   intentC.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
   startActivity(intentC);
   finish();

ActivityC
   setResult(99);
   finish();

출처 : https://gist.github.com/mcelotti/cc1fc8b8bc1224c2f145


FLAG_ACTIVITY_FORWARD_RESULT 를 사용한 예시

https://github.com/operando/Intent-FLAG_ACTIVITY_FORWARD_RESULT-Sample