タブ内のActivity(言葉が間違ってるかも、、)から、TabHostにaddTabする方法をメモ。
やりたかったことのおさらい。
「A、Bという2つのタブをもつTabActがある。Bタブ内イベントでCに移るが、A、Bのタブは残しておきたい。」
前回はBタブ内のイベントで、TabActを継承したSubTabActを起動するようにした。SubTabActで非表示のタブC追加してcurrentになるようにして。
そのときに、1番目のAとcurrentのCが起動することになってしまうので、記事タイトルの「1つ目のTabのActivityを起動させない」につながっていった。
今回の解は、BからTabActのTabHostにタブCを追加してcurrentにする。
で記事タイトルのタブ内のActivityからTabHostを操作する方法には下記の通り。
TabHost tabHost = ((TabActivity) getParent()).getTabHost();
この方法を使ってBのイベント時の処理を下記のように変更。
// Intent intent = new Intent(this, SubTabAct.class);
// startActivity(intent);
TabHost tabHost = ((TabActivity) getParent()).getTabHost();
Intent intent = new Intent().setClass(this, C.class);
TabHost.TabSpec spec = tabHost.newTabSpec("C").setIndicator("C").setContent(intent);
tabHost.addTab(spec);
int i = tabHost.getTabWidget().getTabCount() - 1;
tabHost.getTabWidget().getChildAt(i).setVisibility(View.GONE);
tabHost.setCurrentTab(i);
特筆すべきことはないが、強いて言うならタブを2(A=0,B=1,C=2)に固定しないで、タブ子の数から求めていることくらい。アプリの機能追加などで、デフォルトのタブとしてDが追加となって、2じゃなくなる(A=0,B=1,D=2,C=3)こともあるだろうから。
前回の継承したSubTabAct方式よりはこっちの方が重いAの処理が何度も実行されるわけではないので良さそう。