質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

4936閲覧

Navigation ComponentでFragmentを再生成したくない

KIRIN3

総合スコア28

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/12/01 14:48

Androidアプリを作成していて、作成時にテンプレートのBottom Navigation Activityを選択しました。
Bottomナビゲーションで、Navigation ComponentによりFragmentが切り替わります。

一つのFragmentをWebViewを表示する画面にして、Bottomナビゲーションで何度もFragmentを切り替える想定ですが、WebViewのページのみ再読み込みをさせたくないと考えています。(WebViewのローディングに時間がかかるため)

Navigation Componentでスタックに積んだFragmentを再利用する or Fragmentを再生成してもロードせずに前回のWebView画面を表示するなどの方法はありますでしょうか?

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

WebViewの状態は保存していますか?


コメントを受けて。

https://stackoverflow.com/questions/60875538/save-state-of-fragment-a-when-navigating-from-bottomnavigationview-to-fragment-b
こちらの理由でダメなようです。

BottomNavigationViewもNavigationComponentも使った事がないのであまりあーだこーだ言えないですが、Activityがどうこうよりも、NavigationComponentがまともなfragmentのライフサイクルの管理をしていないように見えますね…。
少なくとも、ViewPager2で使用するFragmentStateAdapterや、前身のViewPagerで使用するFragmentStatePagerAdapterはその辺りはしっかりやっていますけど。(ちゃんとonDestroyViewが呼ばれる前にonSaveInstanceStateが呼ばれている)

ただ、問題はfragmentの問題であり、WebView#saveStateがダメだという話ではないので、自分でライフサイクルを管理されてはいかがですか。
(onSaveInstanceStateが呼ばれないだけであれば、onDestroyViewWebView#saveStateを呼んで状態を保存できるのではないですか。)

もっとも、心配はむしろWebView#saveStateどこまで保存されるかですけどね。
それなりに大きなサイトを開いているのであれば、WebViwe#restoreStateでもそれなりに時間はかかると思います。(まぁやらないよりはマシでしょうけど)

投稿2020/12/02 00:12

編集2020/12/03 00:16
katsuko

総合スコア3538

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KIRIN3

2020/12/02 13:48

回答ありがとうございます。 Activityが生きているためか、onPauseは呼ばれても、onSaveInstanceStateが呼ばれないようです。 なので状態保存ができません。
KIRIN3

2020/12/03 13:49

再度回答ありがとうございます。 >(onSaveInstanceStateが呼ばれないだけであれば、onDestroyViewでWebView#saveStateを呼んで状態を保存できるのではないですか。) そんなことができるのですね。 すみませんが、WebView#saveStateに登録すべきBundleは何を指定すべきかわからないので、もしわかれば教えていただけると幸いです。
katsuko

2020/12/03 22:58

普通にBundleのインスタンスを生成すればいいです。
KIRIN3

2020/12/06 10:53

必要な情報を保持してロードする対応で一旦凌ぐことにしました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問