Android WebView を利用したときの、復帰処理まとめ
- アプリ内でブラウザを表示する際に利用する
WebViewコンポーネントを利用した際の、画面復帰処理まとめです。
WebViewの復帰をさせよう
状態の保持をするときは
-
WebViewには、表示状態を保持するためのsaveStateが用意されているので、これを使って復帰処理をします。 - 使用している
ActivityやFragmentのonSaveInstanceStateの引数を利用してデータの保持を行います。
WebviewFragmentSample.kt
override fun onSaveInstanceState(outState: Bundle) {
webView?.saveState(outState)
super.onSaveInstanceState(outState)
}
状態の復帰をするときは
-
ActivityであればonCreate、FragmentであればonCreateViewの引数savedInstanceState :Bundle?を利用しましょう。 - この
savedInstanceStateにすでに保持されたデータがあれば何らかのデータが引き渡されます。(なにもデータがなければnullです) -
savedInstanceStateをWebViewのrestoreStateに渡してあげることで復帰処理が行われます。
注意点
-
WebViewのloadUrl処理は同期処理では無いです。なので復帰したからといってURLが引き継がれているという保証が無いことに注意しましょう - コードはこのあたりから見れます。
- urlのデータをHandlerMessageを利用して、WebViewCoreに送信して処理を実施しているので、必ずしも同期的に処理が完了する保証がなさそうです。
- なので、
restoreState後に正しくURLが入っているかを確認し、入っていなければ再度セットするようにしておくのが良いと思います。
- なので、
WebviewFragmentSample.kt
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
if (savedInstanceState != null) {
webView?.restoreState(savedInstanceState)
}
if (webView?.url == null) {
webView?.loadUrl(url)
}
・・・省略・・・
}
最後に
- 対応を見逃しそうな
onSaveInstanceStateの話でした、画面の復帰処理は忘れがちな部分だったりしますので、しっかり入れておきましょうって話でした
これからも、良いアプリ開発を目指して![]()