Intent와 startActivityForResult로 onActivityResult하였을때 실행되면
그 액티비티가 종료되면서 자동으로 처음 화면으로 돌아가는데요
그 액티비티를 죽이지 않고 실행이 다 되어도 그 화면 그대로 있을 수 있게 하려면
어떻게해야하나요? 아시는분 도움좀 주세요~~
답변감사드립니다.
말씀하신 전자의 경우에 해당됩니다.
인텐트로 내장기능인 전화번호부나 SMS화면을 불러왔는데
SMS 전송을 하면 바로 전 액티비티로 강제로 이동하더라구요...
그냥 그 화면 그대로 남게 하고싶은겁니다..
추가로 질문을 좀 더 드릴게요
인텐트의 경우 startActivityForResult가 있던데 finishResult는 무엇인지..
addflag에 대해서 설명좀 해주시면 감사하겠습니다~
아아 외부어플를 링크해서 사용하시는거군요.
제가 말씀드린건 하나의 앱 내부의 액티비티들 사이에만 가능한겁니다.
그럼 화면을 유지 할수는 없을 겁니다. 그 앱의 기능 자체가 자신의 기능을 수행하고 종료하는거니까요.
수정하려면 그 앱의 소스를 수정해야 하지요.
대신에 우회적으로 onActivityResult 에서 다시 외부 어플을 실행하는게 대안이 될것 같긴하네요.
※ finishResult 는 startActivityForResult 와 쌍을 이루는 메서드입니다.
A 에서 B 액티비티를 호출할때 startActivityForResult 로 호출함으로써, B 의 결과값을 A 에서 받겠다는 의미이고
이때 B 가 종료한다고 해서 무조건 결과값을 전달해주는것이 아니라,
B 에서 종료할때 finishResult 를 사용해야 결과값을 전달해줄수 있습니다.
위 사용하신 소스에서는 다른 어플내(SMS, 전화번호부..)에서 finishResult 를 사용해서 자신을 종료하고 결과값을
리턴하는 구조로 되어 있을겁니다.
※ intent.addFlag() 의 경우 액티비티를 실행할때, 액티비티 실행에 대한 옵션을 조절하는 것으로 생각하시면 됩니다.
액티비티를 여러개 실행하다보면 액티비티 히스토리 스택이란곳에 액티비티가 쌓이게 되어 있고,
이를 통해서 back 버튼의 뒤로 가기 기능을 사용할 수 있게 되는데요,
바로 이 액티비티 스택을 효율적으로 관리하기 위해서 사용되는게 flag 값입니다.
액티비티를 실행할때 flag 를 설정함으로써 액티비티를 스택에 쌓고 싶지 않다던가, 스택을 초기화 한다던가..
스택 처음에 있는걸 다시 재활용하는 등의 기능을 수행할수 있게 됩니다.
A 액티비티에서 startActivityForResult 를 통해 B 액티비티를 실행하고
B 에서 finishActivity 로 A 로 다시 돌아갔을때,
B 를 죽이지 않고 액티비티 히스토리 스택에 쌓고 싶으시다는건가요?
아니면 B 는 화면에 유지하되 결과 값만 A로 리턴하고 싶다는 건가요?
질문의 애매모호하네요.
일단 전자라면..
finishResult 대신..
인텐트에 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 다음 플래그를 지정하고
startActivity() 를 통해서 A 를 호출하면 될것이고요.
후자라면..
불가능합니다. 편법으로 구현은 가능하겠으나.. 추천 드리고 싶지 않네요.
정확히 어떤 구조를 구현하시려는건지 알면 좀더 명확한 도움을 드릴수 있을것같은데..