7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AndroidのWebView復帰処理について

Posted at

Android WebView を利用したときの、復帰処理まとめ

  • アプリ内でブラウザを表示する際に利用するWebViewコンポーネントを利用した際の、画面復帰処理まとめです。

WebViewの復帰をさせよう

状態の保持をするときは

  • WebViewには、表示状態を保持するためのsaveStateが用意されているので、これを使って復帰処理をします。
  • 使用しているActivityFragmentonSaveInstanceStateの引数を利用してデータの保持を行います。
WebviewFragmentSample.kt

override fun onSaveInstanceState(outState: Bundle) {
        webView?.saveState(outState)
        super.onSaveInstanceState(outState)
    }

状態の復帰をするときは

  • ActivityであればonCreateFragmentであればonCreateViewの引数savedInstanceState :Bundle?を利用しましょう。
  • このsavedInstanceStateにすでに保持されたデータがあれば何らかのデータが引き渡されます。(なにもデータがなければnullです)
  • savedInstanceStateWebViewrestoreStateに渡してあげることで復帰処理が行われます。
注意点
  • WebViewloadUrl処理は同期処理では無いです。なので復帰したからといって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の話でした、画面の復帰処理は忘れがちな部分だったりしますので、しっかり入れておきましょうって話でした

これからも、良いアプリ開発を目指して:dancers:

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?