2015-09-19 17 views
6

API21では、String urlの代わりにWebResourceRequest requestを使用するようにshouldInterceptRequestメソッドを変更しました。 WebViewClientを拡張して両方のメソッドを扱う汎用クラスを書く方法はありますか? マイ最小APIのバージョンは KrystianAPI21のshouldInterceptRequestパラメータの変更方法

答えて

13

おかげで、Googleが代わりに文字列のURL

ないのWebResourceRequest要求を使用するようにshouldInterceptRequest方法を変更し、彼らはshouldInterceptRequest()方法を追加しました。どちらもAPIレベル21+で利用できます。 StringはAPIレベル11以上でご利用いただけます。 Stringは推奨されていないとマークされていますが、下位互換性のためにかなりの期間、Stringの亜種をサポートする必要があります。

WebViewClientを拡張して両方のメソッドを処理する汎用クラスを作成する方法はありますか?

ビルトインshouldInterceptRequest()WebResourceRequestバージョンの実装は単にshouldInterceptRequest()String実装を呼び出します:だから

public WebResourceResponse shouldInterceptRequest(WebView view, 
     WebResourceRequest request) { 
    return shouldInterceptRequest(view, request.getUrl().toString()); 
} 

(今のようthe source codeから)

を、次の2つの選択肢があり:

  1. WebResourceRequestが不要な場合はString版をオーバーライドするだけで、関連するすべてのAPIレベルで使用されます。

  2. WebResourceRequestがAPIレベル21+で使用され、StringエディションがAPIレベル11-20で使用されることを認識して、両方をオーバーライドします。

+0

ありがとうCommonsWareは、実際には両方のメソッドを実装し、API21からのメソッドで@TargetApi(Build.VERSION_CODES.LOLLIPOP)を使用していました。 – Krystian

+0

私は文字列のバージョンをオーバーライドするだけでいいと思う。 –

関連する問題