Zinc #34 新しいタブの追加

最初に表示されるタブでWebブラウジングしている途中で、新しいタブを追加した時の挙動を実装する・・・。

まず、strings.xmlで、

menu_item_add_tab_textの文字列を"新しいタブの追加"に・・・。

あとは、MainActivity.java・・・。

Map型のfragmentMapオブジェクトを用意・・・。
タブ名とFragmentTransaction.addで追加したFragmentのペアをここにも追加・・・。
(FragmentManager.getFragmentsというListを返してくれる便利なメソッドがあったが、削除されている模様・・・。残念・・・。)

onCreateでは、HashMapを生成し、fragmentMapに格納・・・。
fragmentTransaction.add、fragmentTransaction.commitで、webFragment,を追加したら、fragmentMap.putでfragmentTagとwebFragmentのペアを追加・・・。

onOptionsItemSelectedにメニューアイテム選択時の動作を書く・・・。
menu_item_add_tab(新しいタブの追加)の時、まずfragmentTransactionを取得・・・。
fragmentMapから1つのペアentryを取り出し、entry.getValueで値を取り出す・・・。
キーはString、値はFragmentなので、1つ目のfragmentが取得できる・・・。
fragmentTransaction.hideでfragmentを非表示とする・・・。
追加前のfragmentはすべて非表示にしたいので、これをfragmentMapの中のentryの数の分だけ繰り返す・・・。
繰り返しが終ったら、新しいタグ名をfragmentTagに格納・・・。
webFragmentを生成して、fragmentTransaction.addでfragmentTagとともに追加・・・。
その後すぐ、fragmentTransaction.showで表示状態にしておく・・・。
そして、fragmentTransaction.commitで確定・・・。
fragmentMap.putでaddしたfragmentTagとwebFragmentのペアを追加・・・。
webFragmentNoはインクリメント・・・。
そしてsetMenuUrlBarでURLバーを空に・・・。

f:id:BG1:20161013165551p:plain

起動して、

f:id:BG1:20161013165608p:plain

Yahoo!のURLを入力・・・。

f:id:BG1:20161013165649p:plain

Yahoo!が表示される・・・。
スポーツナビを押すと、

f:id:BG1:20161013165755p:plain

スポナビへ・・・。
さらに野球を押すと、

f:id:BG1:20161013165849p:plain

野球に・・・。
ここでメニューを出す・・・。

f:id:BG1:20161013170016p:plain

新しいタブの追加を押すと、

f:id:BG1:20161013170123p:plain

画面が真っ白で、URLバーも空の新しいタブが表示される・・・。

f:id:BG1:20161013170202p:plain

別のURLを入力して、

f:id:BG1:20161013170220p:plain

アクセスできるし、ここでバックキーを押すと、このタブは1ページ目しか表示されてないのでアクティビティが閉じられる・・・。

https://github.com/bg1bgst333/Zinc/tree/develop/android/empty_activity/android_studio/src/Zinc