안녕하세요.
크게 잘못된 부분은 없어보이네요. ^^;
우선 액션바의 탭 쪽 소스를 살펴보죠.
ActiionBarImpl.java입니다.
public void selectTab(Tab tab) {
if (getNavigationMode() != NAVIGATION_MODE_TABS) {
mSavedTabPosition = tab != null ? tab.getPosition() : INVALID_POSITION;
return;
}
final FragmentTransaction trans = mActivity.getFragmentManager().beginTransaction()
.disallowAddToBackStack();
if (mSelectedTab == tab) {
if (mSelectedTab != null) {
mSelectedTab.getCallback().onTabReselected(mSelectedTab, trans);
mTabScrollView.animateToTab(tab.getPosition());
}
} else {
mTabScrollView.setTabSelected(tab != null ? tab.getPosition() : Tab.INVALID_POSITION);
if (mSelectedTab != null) {
mSelectedTab.getCallback().onTabUnselected(mSelectedTab, trans);
}
mSelectedTab = (TabImpl) tab;
if (mSelectedTab != null) {
mSelectedTab.getCallback().onTabSelected(mSelectedTab, trans);
}
}
if (!trans.isEmpty()) {
trans.commit();
}
}
가장먼저 선택 해제된 탭 리스너로 onTabUnselected가 호출되고
다음 선택된 탭 리스너로 onTabSelected가 호출되네요.
이후 해당 트랜잭션은 commit하고 있습니다.
그렇다면 onTabSelected 시
최초 해당 트랜잭션은 add하고
onTabUnselected에서는 dettach하시면 되겠네요.
여기서 onTabSelected 에서는 늘 add하시는 것보다.
mFragement가 null 일때만 add하시고
null이 아닐때는 attach하시는게 좋겠네요.
이렇게 하면 안될 이유가 구조상은 없어 보여요. ^^
어쨌든 기본 구조는 매우 간단하네요.
기존 범위에서 벗어나는 개념은 없습니다.
프로젝트 피크 기간이라 테스트할 시간이 없네요. T-T
고생중이시라면 Sample 소스를 올려주시면 테스트할 수 있을 것아요.
==========================================
추신 일반적으로 tab을 사용하신다면
탭에서 FragmentPagerAdapter 를 사용하시는 것을 추천해드립니다.
이 adapter는 여러가지 프래그먼트간 관리를 편리하게 해주기 때문입니다.
제 강좌의 다음편이 Tab과 FragmentPagerAdapter들이 포함됩니다.
수고하세요.
첫댓글 답변 감사합니다. ^^ 처음엔 mFragement가 null 일때만 add를 해보기도 했습니다. 나름 강의를 보고 배운 이런저런 시도를 해 봤으나 계속 화면이 겹쳐 보여서요 ㅎㅎ 조금더 파보도록 하겠습니다. 감사합니다.
저도 안되신다니 이유가 궁금하네요.
강좌에 add / remove / replace 예제와 동일한 상황이거든요.
프로젝트 소스가 아니라면 sample을 올려주시면 같이 보아요. ^^
@슈퍼성근 원인은 프래그먼트 레이아웃의 백그라운드 투명도 설정 때문이었습니다 OTL. 왕초보가 성장해가는 과정이라 생각하시고 너그러이 이해해 주시길 TT.
투명도를 없애고 해결이 되었습니다만 투명도를 주면 프래그먼트 매니저와는 별도로 UI 쓰레드에서 레이아웃 객체를 따로 저장하여 처리하는건가요?
백그라운드에 투명도를 줬다고 해서 겹쳐서 아래쪽에 보이는 EditText에 focus가 가능하다는게..상식적으로는 이해가 가지 않네요(투명도를 없애도 이전 화면의 텍스트가 위치한 지점을 더블클릭하면 Text selection이 활성화 되는군요..)