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
の話でした、画面の復帰処理は忘れがちな部分だったりしますので、しっかり入れておきましょうって話でした
これからも、良いアプリ開発を目指して