前提・実現したいこと
WebViewClientにおけるonReceivedErrorハンドラの第一引数:WebView について知りたい。
当方の前提条件および疑問
▽前提条件
①.WebViewクラスにID情報などを追加した拡張クラス:WebViewExを実装済み
// public class WebViewEx extends WebView {…}
②.拡張クラスWebViewExにはURL情報を提供するための関数を実装済み
// public String getUrl(){return url;} // onReceivedErrorハンドラ用
③.メイン処理にて、WebViewExインスタンスに対してWebViewClientをセット
// WebViewExインスタンス.setWebViewClient(new WebViewClient();
④. setWebViewClientにて、onPageFinished及びonReceivedErrorハンドラ実装済み
// public void onPageFinished(WebView view, String url) {
// public void onReceivedError(WebView view, …) {
⑤.WebViewExインスタンスのloadUrl()実行エラー時にonReceivedError()の起動を確認
→その際、onReceivedError()が実行された際、引数としてWebView view…を受け取る。
▽疑問
上記⑤のonReceivedError処理内にて、拡張クラスWebViewExの情報が必要となりました。
onReceivedError()は引数にWebViewを受け取るため、拡張クラスWebViewExの情報をどのように参照するか思案しておりました。
試しに拡張クラスWebViewExに基底クラスに存在するgetUrl()と同名の関数をオーバーライドしたところ、WebViewではなく拡張クラスのWebViewExが実行されました。
結果的に意図した処理は実現できたのですが、何かもやもやしています。
疑問①
onReceivedError()イベントの第一引数で渡されるのは"setWebViewClient()した際のオブジェクト"という理解で合っておりますでしょうか?
疑問②
onReceivedError()のwebviewを利用して、その拡張クラスであるWebViewExにしか存在しない処理を実行する方法はありますでしょうか?
該当のソースコード
java
1WebViewEx v.setWebViewClient(new WebViewClient() { 2 // onReceivedErrorハンドラ 3 @Override 4 public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { 5 // URL(IPアドレス)取得 6 view.getUrl(); // WebViewではなく拡張クラスWebViewExのgetUrl()が実行される 7 } 8}); 9
試したこと
リファレンスをチェックしたが要領を得ず。https://developer.android.com/reference/android/webkit/WebViewClient#onReceivedError(android.webkit.WebView,%20android.webkit.WebResourceRequest,%20android.webkit.WebResourceError)
補足情報(FW/ツールのバージョンなど)
開発環境:AndroidStudio(Arctic Fox 2020.3.1)
回答1件
あなたの回答
tips
プレビュー