読者です 読者をやめる 読者になる 読者になる

Zinc #16 回転時のActivity再生成によりWebViewの内容が消える問題の対策

Activityが破棄されない限り、WebViewにロードしている内容は保持される・・・。
しかし、例えば端末を回転させると、Activityは一旦破棄されて、onCreateが再び呼ばれる・・・。
すると、それまでロードしていたページはなかったことになり、新たに真っ白なページが表示されるようになってしまう・・・。

f:id:BG1:20160717193915p:plain

ここで端末を横にすると、

f:id:BG1:20160717193951p:plain

こうなってしまう・・・。

そこでロードしていたページの状態をいったん保存し、onCreateが呼ばれた時に復元するようにする・・・。

回転させると、onSaveInstanceStateが呼ばれるので、ここでwebView.saveStateで引数のBundleオブジェクトoutStateにwebViewの状態を保存する・・・。

onCreateでsavedInstanceStateがnullでなければ、webView.restoreStateで引数のsavedInstanceStateの内容をwebViewに復元する・・・。

これで表示しているページは一応消えない・・・。

ただし、CustomWebViewClientや、CustomWebChromeClientの内容は保存されない模様・・・。
もし、onCreateで再度これをセットしないと、Chromeを起動する問題や、プログレスバーが表示されない問題などが再発してしまう・・・。

f:id:BG1:20160717194315p:plain

ここで回転すると、

f:id:BG1:20160717194020p:plain

ページは表示されているし、スクロールの位置もズレてはいるけど、だいたい同じ・・・。
ただ、見てわかるように、プログレスバーが表示されている・・・。
そのまま復元というより、リロードしてスクロール位置を合わせてる感じ・・・。

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