탭 액티비티 자체가 탭에 대한 히스토리를 쌓아두질 않는 듯 하니 임의로 히스토리를 저장하는 수 밖에..
TabHost mTabHost;
List<Integer> mHistoryList = new ArrayList<Integer>();
//onCreate 에서
mHistoryList.add(0); // 최초 실행시 선택되는 0번째 탭을 history에 저장
mTabHost = getTabHost();
mTabHost.setOnTabChangedListener(new OnTabChangeListener() {
public void onTabChanged(String tabId) {
mHistoryList.add(mTabHost.getCurrentTab()); //탭 변경시 변경된 탭 인덱스를 저장
}
}
// dispatchKeyEvent 오버라이드
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){ // back키가 들어오면 흡수
if(event.getAction() == KeyEvent.ACTION_UP){ // down 과 up이 각각 들어오니 up에서만 처리
goBack();
}
return true;
}
return super.dispatchKeyEvent(event);
}
private void goBack(){
if(mHistoryList.size() <= 1){ // 히스토리에 현재 선택된 탭 인덱스만 들어있을 경우 종료
finish();
return;
}
mHistoryList.remove(mHistoryList.size() -1); // 현재 선택된 탭 인덱스 삭제
int last = mHistoryList.remove(mHistoryList.size() -1 ); 이전 탭 인덱스 꺼내오고 히스토리에서 삭제
mTabHost.setCurrentTab(last); // 이전 탭 표시
}
대충 이정도 해보니 잘 작동하는듯 합니다.
테스트해보세요.
addTab에서 intent를 붙이는 형식으로 해서 다른 방식으로 했을 경우에는 어떻게 될지 모르겠습니다.
"탭액티비티에서 뒤로가기" 라는건
"back을 눌렀을때 이전 탭으로 이동하기"를 뜻하는 것인가요?