先日こんなリクエストがありました。
「広告が表示されるまでに時間がかかってるので先読みできませんか?」
DialogFragmentにWebViewを載せて、onCreateView()内でURLを読み込むようにしていましたが、その時点で読み込み始めたのでは遅すぎるようです。
・DialogFragmentのコンストラクタでWebViewを生成して読み込ませるのはどうか
→WebViewが生成できません…。
WebViewを生成するにはContextが必要ですが、contextがありません…。
getActivity()はこの時点ではnullを返します。
遅くともonAttach()まで呼ばれればgetActivity()がactivityを返してくれるようになりますが、onAttach()が呼ばれるのはいつかと考えると、DialogFragment#show()を呼んだ後ですので、先読みになりません。
・DialogFragmentを呼び出すクラスがWebViewを作ってはどうか
→WebViewが渡せません…。
Fragmentの使い方としては引数なしのコンストラクタが必要です。
Fragment利用時に値が必要であれば、setArguments()で渡す必要があります。
setArguments()の引数はBundleで、BundleにはViewは詰められません。
Viewを渡すメソッドを作れば渡せないこともないと思いますが、それはちょっとねぇ。
結局、解決策がわかりませんでした。
DialogFragmentを使うのをやめ、Dialog風に見せかけたレイアウトを作ってお茶をにごしました。
タグ:android