結論、調べたけど起動させないのは無理のようだ。
「android - How to prevent starting the activity at the first tab in a TabActivity? - Stack Overflow」
同じ質問してる人はいたのだが、回答は「デフォルトが最初になるようタブを並べ直してはどう?」って解決しないし。見た目が変わるので並び替えはダメだろう。
ここでやりたいことを書いておく。
まず、A、Bという2つのタブをもつTabActがある。Bタブ内のイベントでCに移るのだが、A、Bのタブは残しておきたい。
タブは残したいので、TabActを継承したSubTabActを起動する。SubTabActで、C用のTabを非表示で追加してcurrentタブとする。
すると、1つ目のタブAとcurrentタブCが起動されてしまう。AsyncTaskではあるけどAの処理も重いのでちょっと困ったなって感じ。
1つ目のタブを起動させないのは無理なら、1つ目のタブを何もしないダミーのactivityにして非表示で追加してやれば良いのか。TabActのonCreateで1つ目のタブを追加する前に下記追加。
if (!this.getClass().equals(MainTabAct.class)) {
intent = new Intent().setClass(this, DummyAct.class);
spec = tabHost.newTabSpec("dummy").setIndicator("dummy").setContent(intent);
tabHost.addTab(spec);
tabHost.getTabWidget().getChildAt(0).setVisibility(View.GONE);
}
継承したクラスから呼ばれた場合は何もしないDummyActを1つ目のタブになるように追加。このif文は自分のやりたいこと的に継承の場合だけdummyを追加したかったので、自分用につけてあるだけ。常にdummyを1つ目としたいならなくていいじゃん。タイトルの「1つ目のTabのActivityを起動させない」にはなっていないのだけれど、デフォルトが1番目になるように並べ替えるよりはいいだろう。ということで、「何もしないダミーのactivity(※)を1つ目のタブにセットして非表示にする」ことで1つ目のタブを2つ目のタブにしちゃって起動させない。
※何もしないダミーactivityと言っても、ホントに何もしないわけではない。そんなこと注釈しないでもわかるか。
なんかやっていて思ったが、結局SubTabActのタブでAに移れば重い処理は走る。TabAct時に実行した結果と同じ画面を表示するためなのに。自分のやりたかったことは、1つ目のタブを起動させないというよりはAをSingletonのような感じにしたかったのかな。もう少し勉強だ。
※追記
Sinlgetonではないけれど、やりたいことは「タブ内のActivityからタブを操作する 」でも行えた。