2011年4月5日火曜日

Android タブ内のActivityからタブを操作する

1つ目のTabのActivityを起動させない」で自分のやりたかったことの別解。
タブ内の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の処理が何度も実行されるわけではないので良さそう。