TabActivity를 상속받는 Class를 이용해서, 탭을 유지한 채, 여러 Activity를 사용하기 위해, ActivityGroup을 사용하기로 했습니다.
여기저기 검색해본 결과, ActivityGroup을 상속받는 Class를 정의한 후에 Tab에 추가시켜 주는 방식이 많던데
어차피 TabActivity역시 내부적으로 ActivityGroup을 상속받아서 FrameLayout에 Activity들을 겹쳐 쓰는 만큼
TabHost의 LocalActivityManager를 직접 받아와서 View를 변경해주는 식으로 구현한다면
궂이 ActivityGroup을 상속받는 Class를 정의할 필요가 없지 않을까 해서 질문드립니다.
현재 T라는 Tab 하나에 A라는 Class(extends Activity)가 있습니다.
그 때 A라는 클래스에 버튼이 하나 있고, 그 버튼 이벤트 부분에서 다음과 같은 코드를 작성했습니다.
T t=(T)getParent();
setContentView(t.getLocalActivityManager().startActivity("a", new Intent(A.this, B.class)).getDecorView());
B라는 클래스는, 같은 탭을 유지한 채, A를 덮고서 표시되고 싶은 클래스입니다.
그리고 현재 이렇게 하면 B가 문제없이 A대신에 표시됩니다. 하지만, 이건 어디까지나 B의 View를 얻어와서 A의 View에 표시한 것이므로
완벽히 Activity A와 B를 서로 대체했다고 볼 수 없고, 뒤로 가기 문제 역시 해결되지 않을 것 같습니다.
제가 원하는 것은, TabActivity를 상속받은 클래스 T의 FrameLayout에 직접 Activity를 넣어주고 싶은 것입니다.
FrameLayout의 id를 얻어와서 add해야 되는지...
t.setContentView(t.getLocalActivityManager().startActivity("a", new Intent(A.this, B.class)).getDecorView()); 해도 안되고...
어떤 함수를 어떻게 써야 하는지, 코드를 뒤져봐도 감이 잘 안잡힙니다...
질문이 다소 이해하기 힘드시게 작성된 것 같지만, 초보자 시절 생각하시면서(ㅠㅠ), 답변 부탁드립니다.
읽어 주셔서 감사합니다.
우선 제 질문에서는...(질문이 너무 두서가 없었나요?)
TabActivity를 사용하고 있습니다.
그리고 TabActivity안에 Tab들어가는 Activity들 역시 다 있습니다.
다만, 특정 Tab안의 Activity에서 다른 Activity를 call했을 때, Tab메뉴가 사라지는걸 방지하고 싶어서
ActivityGroup을 사용하려 한건데
ActivityGroup을 상속받는 Class를 새로 만들어서 Tab에 추가시켜주기보다(이것도 당연히 한 방법이 되겠지요)
TabActivity자체가 ActivityGroup을 상속받고, TabHost자체가 FrameLayout을 상속받으므로 (android소스 보면 그렇게 되어 있더라고요^^)
이것들을 get하는 식으로 해서 사용하는 방법을 자세히 알고 싶어서 질문 드린 것입니다. ㅠㅠ
아무튼 답변 감사드립니다. 좋은 하루 되세요 !!
하다가 보니 우선, TabActivity내부에서 쓰이는 TabHost의 FrameLayout을 얻으려면
getTabHost().getTabContentView()를 호출하면 되구요
결국 이 밑의 코드로 위 질문의 내용은 구현이 됩니다만, 문제점이 아직 있네요(다른 탭을 눌렀을 때, 기존의 View를 감추는 문제)
T t=(T)getParent();
t.getTabHost().getTabContentView().addView(t.getLocalActivityManager().startActivity("a", new Intent(A.this, B.class)).getDecorView());
삽질하다 보니 하루가 지났군요...
저는 TabActivity를 쓰지않고 ActivityGroup으로 쓰는 이유는 tab을 유지한 상태에서 화면전환을 하려고 ActivityGroup을 사용하고 있습니다.
a라는 tab안에 Activity가 A,B,C 라고 세개가 있다고 가정하면 A에서 클릭했을때 B Activity로 잘 넘어가고 C Activity로 잘 넘어갑니다.
다만 문제가 되는 부분은 back키를 눌렀을 때의 상황입니다. A,B,C라는 Activity를 감싸고 있는 것이 ActivityGroup를 상속받은 class에 Back 이벤트를 처리할 수 있게 해놓았는데 문제는 C Activity에서 B Activity로 넘어가서 B에서 다른 ListView 영역을 클릭했을 때 전에 보여진 View가 나타난다는 것입니다. ActivityGroup을 상속받는 클래스에서 인덱스 값을 구해 remove 시켰는데 자꾸만 전에 있는 화면이 사라지지 않고 남아 있더라구요. View를 ArrayList형식으로 저장하였는데 Activity를 호출하면서 다른곳에 전에 사용된 Intent값들을 가지고 있다가 걔네들을 다시
호출하는 것 같더라구요. 혹시 이게 Activity를 처리하면서 Task에 Intent값을 저장해 놓아서 그런지 모르겠지만 Activity 3개를 다 타고 나서 Back키를 누르면 왜 각각 저장되어진 View들이 사라지지 않고 다시 호출되는지 아시는 분 있으면 정보를 공유하고 싶습니다.