2012年10月17日水曜日

TabHostのタブを1つだけ削除する

【目的】TabHost>TabWidget内のタブを一つだけ削除したい
(TabHost.clearAllTabs()による全タブ削除じゃなくて)
(実装環境:GalaxyNexus ver_4.0.4)

調べ方が悪かったのか、なかなか見つかりませんでした…
しかも解決策として採用したのが2008年の見知らぬ海外の掲示板でのやりとりという…
(参照先URL:http://www.coderanch.com/t/460859/Android/Mobile/TabHost-Remove-Tab)
もっと正規の方法があるかもしれませんが、一応メモです。

<タブ削除の為の下準備>
1.TabHost.TabSpecのListを作成しておく
 List<TabHost.TabSpec> tabSpecs = new ArrayList<TabHost.TabSpec>();

2.タブ追加時に生成したTabHost.TabSpecインスタンスをListに格納しておく
 TabHost.TabSpec tabSpec = new tabHost.newTabSpec([TabId]).setIndicator(...);
 tabHost.addTab(tabSpec);
 tabSpecs.add(tabSpec);

<タブ削除の手順>
3.Listから削除したいタブに相当するTabHost.TabSpecを削除する
 tabSpecs.remove([index]);

4.タブを一度、全削除する
 tabHost.clearAllTabs();

5.Listを利用して、再度タブを生成する
 for(TabHost.TabSpec ts : tabSpecs){
  tabHost.addTab(ts);
 }

これで、おそらくタブを一つだけ削除した状態になる…かと…
でもこれってメモリの食い具合ってどうなるのでしょう…
捨てたつもりが実は捨ててないとか、ありそう、うぅん…


ちなみにわたしは諸事情により、TabHost.addTab(...)以降に
動的にタブのラベルやアイコンを変更したりしていたのですが
上記の手順では一旦全部のタブを消去して、タブを作り直してしまっているので
それらの変更もきれいさっぱりなくなっちゃいました…
なのでその辺の対応もしなくてはならなくなり、正直面倒くs…ゲフンゲフン。