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

먼저 show() 호출 된 대화상자에 나중에 show() 호출된 대화상자가 가려지게 할 수 있을까요?

0 추천
먼저 팝업된 대화상자가 프로그레스 용도의 대화상자라 나중에 팝업되는 대화상자에 가려지거나 포커스 아웃되면 안되는 상황입니다. 포커스를 안잃고 항상 탑에 위치시키기 위한 속성 값 같은 게 있을까요?
pigstoe (510 포인트) 님이 2023년 10월 19일 질문

1개의 답변

+1 추천
 
채택된 답변
혹시 어떤 요구사항인지요? 질문으로는 일반적이지 않은 처리방법인 것 같네요.
spark (227,530 포인트) 님이 2023년 10월 20일 답변
pigstoe님이 2023년 10월 21일 채택됨
메인 액티비티에 대화상자가 A, B 두 개 있다고 가정하겠습니다. A는 원형 프로그래스바가 빙글빙글 돌면서 작업 중임을 알리는 텍스트가 포함된 대화상자 입니다. B는 다른 기능을 가진 대화상자이고요.

먼저 "B가 초기화되는 중..."이라는 메시지를 담아 A를 show()하고, 그 다음으로 B를 생성 및 show() 호출 합니다. 그리고 B가 created 되는 시점에 A를 dismiss() 합니다.

이 때 제 의도와는 달리 B가 생성 및 초기화되기 시작하면서 화면상으로 A를 가립니다. 사용자가 "B가 초기화되는 중..." 이라는 메시지를 확인할 수가 없는 상황이죠. 제 질문은 A를 B보다 위에 보여지게 하기 위해서는 어떻게 해야하는지 입니다.

보통은 나중에 show() 호출된 대화상자가 먼저 호출된 대화상자를 가리는 것 같은데, 먼저 show() 호출되었더라도 나중에 호출된 대화상자보나 상위에 있을 수 있는 방법이 있을까요? 일반적인 처리 방법은 어떤 것인지도 궁금하네요. 말씀 부탁드립니다.
왜 원하시는 대로 동작하지 않는지는 알 수 없지만, 제 생각에는 A, B를 꼭 Dialog로 고집할 할 필요는 없고, Activity, Fragment, DialogFragment, View 등 다양한 선택지가 있습니다.  액티비티에서 A를 보여주고 B를 띄우기 전에A를 제거하세요. 그리고 B가 로딩화면을 보여주도록 변경해보세요. 특히 첫번째 로딩은 액티비티의 레이아웃의 일부로 만들 수 도 있습니다. 예를 들면 ProgressBar를 사용하거나 버튼 자체가 ProgressBar를 보여주게 할 수 도 있구요.  필요하시면 디자인을 약간만 수정해 보세요. 해결방법을 찾으실 수 있을 겁니다.
B 생성 전 ~ B 생성 및 show() 완료 구간을 완벽하게 A로 커버하려면 말씀하신대로 B를 대화상자가 아닌 Fragment로 구현 하든지 하는, 디자인 변경 밖에 답이 없는 것 같네요. 도움 말씀 감사합니다.
액티비티에서 A를 띄우고 B에 필요한 데이터를 초기화한 후 B를 띄워보세요. 초기화된 데이터는 B로 넘기거나 스토리지 등을.통해 공유하세요.
...