Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

AndroidのWebView復帰処理について

More than 1 year has passed since last update.

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:

sokume2106
名古屋で Android や iOS のアプリ開発しています。どっちも好きですがドロイド君の方が好きかも。
stmn-co
名古屋のITスタートアップベンチャーです。「一人でも多くの人に、感動を届け、幸せを広める。」の経営理念のもと、 エンゲージメント経営コンサルティング「TUNAG」、オンラインファンサロンアプリ「FANTS」などのサービスを展開しています。
https://stmn.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away