タブを表現する TabActivity で、BACKキーの動作が、タブを切り替えた履歴に従うように
するには、TabHost の setOnTabChangedListener でタブ切り替えの情況を Stack 等に積み上げて
onKeyDown ではなくて、dispatchKeyEvent で KeyEvent.KEYCODE_BACK を拾って制御する。
public class SanpleTab extends TabActivity{
private TabHost mTabHost;
Stack<String> mTabHistory = new Stack<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
// 省略
mTabHistory.push("firstDisplayTabName");
mTabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener(){
@Override
public void onTabChanged(String tabId){
mTabHistory.push(tabId);
}
});
}
@Override
public boolean dispatchKeyEvent(KeyEvent event){
if (event.getKeyCode()==KeyEvent.KEYCODE_BACK && event.getAction()==KeyEvent.ACTION_DOWN){
mTabHistory.pop();
if (mTabHistory.isEmpty()){
// 終了する
finish();
}else{
mTabHost.setCurrentTabByTag(mTabHistory.pop());
}
return true;
}
return super.dispatchKeyEvent(event);
}
}
現在のタブIDを保持しながら Stack に積み上げる方法をしないなら、、
こんなコードになる。