タブ切り替えの履歴を辿る

タブを表現する 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 に積み上げる方法をしないなら、、
こんなコードになる。