新しいタブを追加する機能を実装する・・・。
まずは、
android:id="@+id/action_newtab_add"なるメニューアイテムを追加し、
"新しいタブ"という表示名に・・・。
MainActivity.javaは、
"新しいタブ"を選ぶと、新しいタブが1つ追加される・・・。
最初のタブが"新しいタブ1"なので、追加されるのは"新しいタブ2"・・・。
WebViewTabFragment.javaは、
インスタンス状態を持つBundle型のmInstanceStateをメンバとしてもっておく・・・。
onCreateViewで引数として渡されるsavedInstanceStateを使わないのには理由がある・・・。
タブでフラグメントを切り替えたとき、隠れるフラグメントはonDestroyViewは呼ばれても、onDestroyが呼ばれない・・・。
そのため、onSaveInstanceStateも呼ばれず、インスタンス状態をそのまま保存できない・・・。
よって、次にonCreateViewが呼ばれた時、savedInstanceStateから状態が復元できない・・・。
webViewの状態復元に必要なのに・・・。結果webViewが真っ白になってしまう・・・。
そこでメンバとして持たせることで、保存・復元が可能になる・・・。
webViewを取得したら、BundleをnewしてmInstanceStateに入れる・・・。
webView.saveStateでmInstanceStateに保存
このフラグメントが隠れても、onDestroyは呼ばれないので値は保持される・・・。
このフラグメントが再び表に出た時、
mInstanceStateがあるので、webView.restoreStateでmInstanceStateからwebViewの状態が復元される・・・。
起動して、
yahoo.co.jp
ロードされた・・・。
メニューの新しいタブ・・・。
新しいタブ2ができてる・・・。
新しいタブ2を選択すると、まだ何も表示されてない・・・。
bg1.hatenablog.comを指定・・・。
ブログが表示された・・・。
リンク先も行ける・・・。
新しいタブ1に戻っても表示される・・・。
リロードされるのはWebViewClientなどを毎回newしているから・・・。
(この問題は解決策がまだ見つかっていない・・・。)
スポナビに進む・・・。
また新しいタブ2に・・・。
ここでバックすると、ブログトップに戻る・・・。
さらにバックすると終了する・・・。
タブというかフラグメントごとにWebViewが独立していて、そのWebViewの最初のページで戻るを押すと、アクティビティを閉じるようになっている・・・。
(この辺は特にいじる必要なく実現できている・・・。よかった・・・。)
https://github.com/bg1bgst333/Zinc/tree/develop/android/empty_activity/android_studio/src/Zinc